2013-02-06 26 views
1

我有一個元素數組,我想在每個元素上使用inserBefore,因爲我遍歷數組。它應該在數組中的每個元素之後添加要插入的元素,但僅將其添加到數組中的最後一個元素。我認爲這是一個關閉問題,但即使在使用關閉後,我仍然遇到問題。沒有關閉,我通過將類名更改爲數組所在的鍵值來測試它,並且它改變了它沒有問題。在元素數組上使用insertBefore

for(var i in elems){ 
        var refElem = elems[i]; 

         refElem.parentNode.insertBefore(elementToInsert, refElem.nextSibling); 
       } 

下面的代碼減去關閉。如何獲取elementToInsert添加到數組中的每個元素?

回答

4

它應該添加的每個元素

這就是出現麻煩的地方後,該元素將要插入時,你不能一個元素多次插入DOM。如果你嘗試,它會在將它插入某處(再次)之前從DOM中刪除該元素。所以,你需要用你的cloningelementToInsert循環的每個回合創建不同的元素,例如。

順便說一句,從來沒有使用for…in-loops with arrays

+0

我發現在插入元素的末尾添加'.cloneNode(true)'解決了這個問題。 – Badrush

2

就像Bergi說的那樣,你插入的元素實際上被添加,然後從節點中移除。

for(var i in elems){ 
    var refElem = elems[i]; 
    refElem.parentNode.insertBefore(elementToInsert.CloneNode(), refElem.nextSibling); 
} 

你也可以通知參數'deep',它也會克隆所有的子節點。

https://developer.mozilla.org/en-US/docs/DOM/Node.cloneNode

0

只是後的小修正前:

for(var i in elems){ 
    var refElem = elems[i]; 
    refElem.parentNode.insertBefore(elementToInsert.cloneNode(), refElem.nextSibling); 
} 

功能cloneNode()開始用小寫。