我想實現一個簡單的函數,獲取一些元素列表(在這種情況下,我通過一些<li>
元素)並將它們以隨機順序追加到某個父節點(<ul>
)。要做到這一點,我寫了這樣的事情:JS DOM追加孩子不工作
console.log(tmpList);
var maxIndex = tmpList.length;
while(tmpList.length > 0) {
var curIndex = Math.floor(Math.random() * maxIndex);
if(tmpList[curIndex] && tmpList[curIndex].nodeType===1) {
var elem = tmpList.splice(curIndex, 1);
console.log(elem);
parent.appendChild(elem);
}
}
正如你可以看到我做檢查,如果隨機chosed指數居然還在tmpList
存在,如果它實際上是html元素。但是,當我運行此代碼時,我得到:
[li, li, li, li]
[li]
NotFoundError: Failed to execute 'appendChild' on 'Node': The new child element is null.
我該怎麼做?
ps。請不要給我這樣的建議,如「使用jQuery」或「只是使用innerHTML連接」,因爲我有些理由不能使用它們。
parent
元素定義了幾行,所以情況並非如此。
while(tmpList.length > 0) {
var curIndex = Math.floor(Math.random() * tmpList.length);
var elem = tmpList.splice(curIndex, 1);
console.log(elem);
if(elem instanceof HTMLElement) {
//console.log(curIndex);
console.log(elem);
parent.appendChild(elem);
}
}
return true;
現在看起來更好一點,但仍然有效奇怪:
UPDATE
我根據一個答案,使代碼看起來如下做了一些改動。現在控制檯輸出爲:
[li, li, li, li]
[li]
[li]
[li]
[li]
所以它擁有li元素,但不把他們當作HTMLNode ...:O(相同的結果,當我用elem !== null && elem !== undefined && elem.nodeType === 1
)
你如何在if循環中加入'if(typeof elem!== null)parent.appendChild(elem);'到你的循環中? – techouse
您可以提供一個JSFiddle,它引發您在控制檯中看到的相同錯誤嗎?那麼幫助會容易得多。 –
http://jsfiddle.net/UR3ZQ/ <但是我沒有看到任何控制檯有錯誤 – Moby04