2013-08-23 70 views
4

中的所有元素這段JavaScript代碼的創建到刪除是一個div內的所有輸入的Javascript不刪除一個div

function remove_inputs(){ 
    var elements=document.getElementById('thediv').getElementsByTagName('input'); 
    for(var i=0;i<elements.length;i++){ 
     elements[i].parentNode.removeChild(elements[i]); 
    } 
} 

我也只刪除元素通話的一半,我得叫了好次數以便移除所有輸入。

請檢查這個Jsfiddle看到它的行動。

+0

'elements.length'評估每一個循環迭代。那就是問題所在。 嘗試將'elements.length'保存在變量上並在'for'循環中使用此變量。 –

+2

@HugoHidekiYamashita不,這不是問題。如果刪除項目0,則項目1變爲項目0. –

+1

@dystroy抱歉,我沒有意識到這一點。 –

回答

4

這是因爲您在從live nodelist中刪除時跳過了項目。

當你在索引0中刪除該項目,這是在指數產品1採用指數0,從而爲您的迭代已經對指數不要刪除它1.

像這樣做:

function remove_inputs(){ 
    var elements=document.getElementById('thediv').getElementsByTagName('input'); 
    while(elements.length){ 
     elements[0].parentNode.removeChild(elements[0]); 
    } 
} 
+2

我可以提供演示:[http://jsfiddle.net/davidThomas/9wNkf/1/](http://jsfiddle.net/davidThomas/9wNkf/1/)。 –

-1
function remove_inputs(){ 
    var elements = document.getElementById('thediv').getElementsByTagName('input'); 
    var size = elements.length; 

    for(var i = 0; i < size; i++){ 
     elements[i].parentNode.removeChild(elements[i]); 
    } 
} 
+1

這根本行不通。我已經解釋了爲什麼。 –

2

你爲什麼不使用jQuery呢?

function remove_inputs(){ 
    var elements = $('#thediv input'); 
    elements.remove(); 
} 

下面是詳細信息:http://api.jquery.com/remove/

+3

請不要推薦使用巨大的圖書館來完成這個簡單的任務。 –

+0

JQuery非常普遍,如果只是針對任何導致問題的搜索引擎結果,那麼提供使用它的解決方案几乎總是合適的。 – Deadron