0

这看起来很简单,但我无法让它工作。我可以添加 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 可以删除第一个添加的元素,但是当我尝试使用“计数”时,我无法删除我的“元素”。

非常感激任何的帮助。

谢谢!

4

2 回答 2

1

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

fieldsArea.removeChild(SomeID+count);

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

fieldsArea.removeChild(document.getElementById('SomeID'+count));
于 2011-03-14T22:18:20.370 回答
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将引用按钮,因为它是 的子项,所以divthis.parentNode的是div

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

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

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


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

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

还可以查看.removeChild

于 2011-03-14T22:18:24.470 回答