首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript RemoveChild逻辑/问题

JavaScript RemoveChild逻辑/问题
EN

Stack Overflow用户
提问于 2009-10-12 16:33:38
回答 2查看 2.1K关注 0票数 0

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

你能告诉我有没有更好的方法来做removeGoalFromHiddenFields函数?可以有许多“子目标”项。

我将使用下面的代码开始测试,但我对此有一些疑问。

谢谢,

尼尔·沃尔特斯

代码语言:javascript
复制
   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]);

             }
           }

}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-12 16:50:44

我猜您在这里需要的是dojo.query的功能。

尝试如下所示:

代码语言:javascript
复制
dojo.query("#form1 input[value=\"" + goalText + "\"]").forEach(function(field) {
    field.parentNode.removeChild(field)
});
票数 2
EN

Stack Overflow用户

发布于 2009-10-12 16:55:22

field.setAttribute(“类型”,“隐藏”);

不要在超文本标记语言文档上使用setAttribute。IE上有很多bug。使用普通的DOM-HTML属性,这些属性也更易于阅读:

代码语言:javascript
复制
field.type= 'hidden';

变量位置= nodei.innerHTML.IndexOf(goalText)

在HTML标记中搜索值是愚蠢的,当goalText包含像“<”或“&”这样的字符,而HTML将对其进行转义时,这种方法将不起作用。

对于上面的代码,看起来nodes[i]应该是您附加到那里的<input>元素之一,在这种情况下,innerHTML不好,因为它只搜索输入的内容,因为输入是空元素。相反,看看您放在那里的value属性:

代码语言:javascript
复制
var input= nodes[i];
if (input.name=='subgoal' && input.value==goalText)
    input.parentNode.removeChild(input);

另外,我可以这样做吗:

= document.getElementById("subgoal")

不,因为您的子目标元素没有ID。get by name:

代码语言:javascript
复制
var subgoals= form.getElementsByName('subgoal');

(与DOM-0相同:)

代码语言:javascript
复制
var subgoals= form.elements.subgoal;

或者,将ID添加到每个子目标,以帮助您以后检索它:

代码语言:javascript
复制
field.id= 'id-'+goalText;

同样,如果您在goalText中可以使用特殊字符,则上面的操作将不起作用。

或者,在JavaScript中保留您自己的查找,而不是将所有内容都放在DOM中:

代码语言:javascript
复制
var subgoalfields= {};
...
// on add
subgoalfields[goalText]= field;
...
// on remove
subgoalfields[goalText].parentNode.removeChild(subgoalfields[goalText]);
delete subgoalfields[goalText];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1555594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档