JavaScript RemoveChild逻辑/问题

JavaScript RemoveChild逻辑/问题,javascript,dojo,removechild,Javascript,Dojo,Removechild,我正在使用Dojo拖放。当用户将项目添加到容器(div dojoType='dojo.dnd.Source')时,我需要将该数据获取到表单中,以便稍后当用户提交整个页面时,我可以在服务器上处理该数据。那部分正在发挥作用。 然后,要删除一个项目,我允许他们将一个项目拖放到“垃圾”容器中。 我很难概念化如何从隐藏字段中删除该项。 我已经有了subscribe/event代码来调用以下两个函数 您能告诉我是否有更好的方法来执行removeGoalFromHiddenFields函数吗? 可以有许多“子

我正在使用Dojo拖放。当用户将项目添加到容器(div dojoType='dojo.dnd.Source')时,我需要将该数据获取到表单中,以便稍后当用户提交整个页面时,我可以在服务器上处理该数据。那部分正在发挥作用。 然后,要删除一个项目,我允许他们将一个项目拖放到“垃圾”容器中。 我很难概念化如何从隐藏字段中删除该项。 我已经有了subscribe/event代码来调用以下两个函数

您能告诉我是否有更好的方法来执行removeGoalFromHiddenFields函数吗? 可以有许多“子目标”项

我将用下面的内容开始测试,但我对此有些怀疑

谢谢

尼尔·沃尔特斯

   function addGoalToHiddenFields( goalText){
      var field = document.createElement("input");
      field.setAttribute("type","hidden");
      field.setAttribute("value",goalText);
      field.setAttribute("name","subgoal");

      //add new hidden-element to the existing form
      document.getElementById("form1").appendChild(field);
   }

   function removeGoalFromHiddenFields( goalText){

      //remove hidden field 
      nodes = document.getElementById("form1")
      for (i=0;i<nodes.length ;i++ )
           {
             var pos = nodes[i].innerHTML.IndexOf(goalText)
             if (pos > 0)
             {
                 nodes.removeChild(node[i]);

             }
           }
函数addgoalthiddenfields(goalText){
var字段=document.createElement(“输入”);
field.setAttribute(“类型”、“隐藏”);
field.setAttribute(“值”,goalText);
field.setAttribute(“名称”、“子目标”);
//将新的隐藏元素添加到现有表单中
document.getElementById(“form1”).appendChild(字段);
}
函数removeGoalFromHiddenFields(goalText){
//删除隐藏字段
节点=document.getElementById(“form1”)
对于(i=0;i=0)
{
nodes.removeChild(node[i]);
}
}
}

另外,我可以这样做吗:
nodes=document.getElementById(“子目标”)

我猜您想要的是的功能

尝试以下方法:

dojo.query("#form1 input[value=\"" + goalText + "\"]").forEach(function(field) {
    field.parentNode.removeChild(field)
});

我猜你想要的是的功能

尝试以下方法:

dojo.query("#form1 input[value=\"" + goalText + "\"]").forEach(function(field) {
    field.parentNode.removeChild(field)
});
field.setAttribute(“类型”、“隐藏”)

不要在HTML文档上使用setAttribute。IE上有许多错误。请使用普通的DOM-HTML属性,这些属性也更易于阅读:

field.type= 'hidden';
var pos=node[i].innerHTML.IndexOf(goalText)

在HTML标记中搜索一个值是愚蠢的,并且当goalText包含一个类似' field.setAttribute(“类型”、“隐藏”)

不要在HTML文档上使用setAttribute。IE上有许多错误。请使用普通的DOM-HTML属性,这些属性也更易于阅读:

field.type= 'hidden';
var pos=node[i].innerHTML.IndexOf(goalText)


在HTML标记中搜索一个值是愚蠢的,当goalText包含一个像“Actually removeGoal…”这样的字符时,它就不起作用了。。。根本不起作用,因为document.getElementById调用的返回类型从来没有长度属性(除非您在那里使用了一些expando魔术)。for循环将始终中断。实际上,删除。。。根本不起作用,因为document.getElementById调用的返回类型从来没有长度属性(除非您在那里使用了一些expando魔术)。for循环总是会中断。感谢IE中关于setAttribute的警告,我已经更改了它。我知道我并没有把我的问题限制在Dojo上,但是使用Dojo.query的Rakesh答案非常有效。感谢IE中关于setAttribute的警告,我已经改变了这一点。我知道我并没有把我的问题限制在Dojo上,但使用Dojo.query的Rakesh答案非常有效。谢谢,这是一个非常优雅的解决方案。我已经根据需要学习了更多关于Dojo的知识,但我还没有打开关于Dojo.query的章节。另外-你的答案还需要一个类似这样的双引号:“\”])哦。谢谢你指出缺少的引号。修复了我的答案。谢谢-这是一个非常优雅的解决方案。我已经根据需要了解了更多关于Dojo的知识,而且我还没有打开关于Dojo.query的章节。另外-你的答案还需要一个类似这样的双引号:“\”)哦。谢谢你指出遗漏的报价。修正了我的答案。
var subgoals= form.elements.subgoal;
field.id= 'id-'+goalText;
var subgoalfields= {};
...
// on add
subgoalfields[goalText]= field;
...
// on remove
subgoalfields[goalText].parentNode.removeChild(subgoalfields[goalText]);
delete subgoalfields[goalText];