2011-03-14 35 views
0

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

<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工程和删除第一个添加的元素,但是当我尝试使用“计数”,我只是不能删除我的“元素”。

任何帮助将不胜感激。

谢谢!

回答

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.parentNodediv

你也必须改变你的函数接受应删除的元素:

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

你可能还需要更新fields,但我不知道你的代码是如何工作的。


如果要删除所有的人,你必须循环:

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

也有看documentation of removeChild

+0

谢谢菲利克斯·克林 - 我正在尝试它:) – lixcab 2011-03-14 22:35:30

+0

@lixcab:你的HTML中有一些错误(如重复关闭的body标签)。我纠正了你的小提琴,并使删除按钮的工作。看看它:http://jsfiddle.net/fkling/GnwpM/1/你也不需要'count'变量。希望有所帮助! – 2011-03-14 22:45:26

+0

再次感谢!现在审查!:) – lixcab 2011-03-14 22:47:33

1

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

fieldsArea.removeChild(SomeID+count); 

例如,您可以通过该节点这样

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

谢谢!试了他们两个,但我不能得到它的工作。 fieldsArea.removeChild(SomeID1)肯定有效,但fieldsArea.removeChild(SomeID + count)不会(可能是因为它是一个字符串而不是DOM)。我必须做其他事情。 – lixcab 2011-03-14 22:29:20

+0

Both?只是第二个代码片段应该工作(fieldsArea.removeChild(document.getElementById('SomeID'+ count)):D ..btw,你可以在http://jsfiddle.net/上做一个例子,这样我们可以很容易地检查出什么是错的用你的代码;) – stecb 2011-03-14 22:32:16

+0

@lixcab:'fieldsArea.removeChild(SomeID1)'不能工作,除非'SomeID1'是一个包含DOM元素的变量。 – 2011-03-14 22:32:16