2010-05-18 65 views
3

我想從第三方網站上的div中刪除元素。谷歌瀏覽器擴展程序刪除元素

<div id="full_size_photo"> 
    <img src="img1"> 
    <img src="img2"> 
</div> 


var imageDiv = document.getElementById("full_size_photo"); 
imageDiv.removeChild(imageDiv.childNodes[i]); 

imageDiv顯然有5個孩子? :S 當我是1時,img1被正確移除。 當我刪除3和4 img2被刪除...

有人能夠解釋爲什麼這是?

據我所知,我認爲第一個img標籤會是0,第二個會是1?

回答

1

空白舒展textNode情況

註釋例如:

<div id="full_size_photo">[node 1 -- 
--]<img src="img1">[node 3 -- 
--]<img src="img2">[node 5 -- 
]</div> 

這裏就是你真正想做的事:

var div = document.getElementById("full_size_photo"); 
var images = div.getElementsByTagName("img"); 
div.removeChild(images[0]); 

希望這有助於!

+0

您還可以使用nodeType屬性來檢測它是否是元素或文本節點。有關更多信息,請參閱http://www.w3schools.com/dom/prop_node_firstchild.asp。 – 2010-05-18 18:25:30

+0

你的代碼更有意義,你也很清楚地解釋了我的問題。 非常感謝。 – 2010-05-18 18:33:08

0

最有可能的是,img節點之間的文本節點是什麼讓你跳動。嘗試是這樣的:

var imgList = imageDiv.getElementsByTagName('img'); 
for (var i = imgList.length - 1; i >= 0; i--) { 
    imageDiv.removeChild(imgList[i]); 
} 

兩件事需要注意:

  • 我們只是通過爲img節點,不是所有的孩子
  • 我們通過反向循環的孩子尋找,因爲我們正在移除節點(否則,在移除節點1後,我們會將索引增加到2,但之前位於位置2的節點現在位於位置1,因此它將被跳過)。