有兩件事情,我擔心有關代碼:
remove
是一個相對較新的DOM方法,它沒有得到很好的支持。爲了更好的支持,請使用img.parentNode.removeChild(img);
getElementsByTagName
返回現場NodeList
,所以當您從列表的開頭移除元素,所有其他的上移。因此,如果列表中有5個條目,並且您刪除了i=0
元素,則其他所有元素都會移動,並且現在會有一個新元素(長度爲4
)。你的循環將移動到i=1
,因此在i=0
(原來在i=1
)的元素將不會得到處理。
對於非生命NodeList
,請使用querySelectorAll('tagname')
(或者只是向後循環列表,從最後刪除)。或者使用Array.prototype.slice
將NodeList
轉換爲數組。
querySelectorAll
得到所有現代瀏覽器和IE8的支持。
下面是一個使用querySelectorAll
一個例子:
var imgElements = document.querySelectorAll("img"); // HTMLCollection
for(var i=0; i<imgElements.length; i++) {
var img = imgElements[i];
img.parentNode.removeChild(img);
}
或者只是向後計數:
var imgElements = document.getElementsByTagName("img"); // HTMLCollection
for(var i=imgElements.length-1; i>=0; i--) {
var img = imgElements[i];
img.parentNode.removeChild(img);
}
或者使用Array.prototype.slice
:
var imgElements = Array.prototype.slice.call(document.getElementsByTagName("img"));
for(var i=0; i<imgElements.length; i++) {
var img = imgElements[i];
img.parentNode.removeChild(img);
}
@StefanHaustein:確實是這樣。 :-)(我以爲我會把它放在原文中,但無論如何,它現在在這個版本中都有例子。) –
@TJCrowder現在一切都結晶了,我完全忘記了getElementsByTagName返回實時html集合,多謝兄弟。 – user3448600