2010-05-18 135 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,因此它将被跳过)。