【问题标题】:Javascript removeChild arrayJavascript removeChild 数组
【发布时间】:2011-03-14 22:13:17
【问题描述】:

这看起来很简单,但我无法让它工作。我可以添加 DOM 元素,但在使用数组时无法删除它们。

<script language="javascript">
fields = 0;
count = 0;
function addInput() {
  if (fields != 10) {
      var htmlText =  "<input type='search' value='' name='field[]' />";
      var remButton = "<input type='button' value='del' onclick='remove()' />";
      var newElement = document.createElement('div');

      newElement.id = 'SomeID'+fields; 
      newElement.innerHTML = htmlText + remButton + newElement.id;

      var fieldsArea = document.getElementById('text');
      fieldsArea.appendChild(newElement);

      fields += 1;
  } else {
     ...
  }
count++;
}

// NEED HELP FROM HERE PLEASE
// You don't need to Loop, just get the button's id and remove that entire 'SomeID'


function remove() {
  fieldsArea = document.getElementById('text');


  fieldsArea.removeChild(SomeID1);   <-----------------------THIS WORKS!
  fieldsArea.removeChild(SomeID+count); <------------------THIS JUST WOULDN'T

  count--;
}
</script>

在删除函数中,编写 SomeID1 可以删除第一个添加的元素,但是当我尝试使用“计数”时,我无法删除我的“元素”。

任何帮助将不胜感激。

谢谢!

【问题讨论】:

    标签: javascript html dom appendchild removechild


    【解决方案1】:

    您必须首先获得对该元素的引用。目前,您正在将未定义的变量 SomeID 传递给函数。

    例如:

    var element = document.getElementById('SomeID' + fields);
    // or starting by zero: var element = document.getElementById('SomeID0');
    element.parentNode.removeChild(element);
    

    如果要删除单击按钮的div,则必须将对相应div 的引用传递给remove 函数。

    '<input type="button" value="del" onclick="remove(this.parentNode)" />';
    

    this 将引用该按钮,因为它是 div 的子级,this.parentNode 引用该 div

    您还必须更改您的函数以接受应该删除的元素:

    function remove(element) {
      element.parentNode.removeChild(element);   
      count--;
    }
    

    您可能还需要更新fields,但我不确定您的代码应该如何工作。


    如果要删除所有这些,则必须循环:

    for(;fields--;) {
       var element = document.getElementById('SomeID' + fields);
       element.parentNode.removeChild(element);
    }
    

    还可以查看documentation of removeChild

    【讨论】:

    • 感谢 Felix Kling - 我现在正在尝试 :)
    • @lixcab:您的 HTML 中有一些错误(例如重复的结束正文标签)。我纠正了你的小提琴并使删除按钮起作用。看看它:jsfiddle.net/fkling/GnwpM/1 你也不需要count 变量。希望有帮助!
    • 再次感谢!现在审查! :)
    • 我是个玩 Javascript 的白痴,先生,你不是。 :) 谢谢!
    • @lixcab:不客气 :) 练习,练习,再练习 ;) 编码快乐!
    【解决方案2】:

    removeChild 需要一个节点(DOM 元素)作为参数。在这种情况下

    fieldsArea.removeChild(SomeID+count);
    

    例如,您可以通过这种方式传递节点

    fieldsArea.removeChild(document.getElementById('SomeID'+count));
    

    【讨论】:

    • 谢谢!尝试了他们两个,但我就是无法让它工作。 fieldsArea.removeChild(SomeID1) 确实有效,但 fieldsArea.removeChild(SomeID+count) 不会(可能是因为它是字符串而不是 DOM)肯定是我做错了。
    • @lixcab: fieldsArea.removeChild(SomeID1) 不能工作,除非 SomeID1 是一个包含 DOM 元素的变量。
    • 两者?只有第二个代码 sn-p 应该可以工作 (fieldsArea.removeChild(document.getElementById('SomeID'+count)) :D ..btw,你可以在jsfiddle.net 上做一个例子,这样我们就可以轻松检查你的代码有什么问题;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    相关资源
    最近更新 更多