使用 DOM 方法删除图像元素
removing images elements using DOM method
谁能解释为什么 remove() 方法不能按我的预期工作。我想从文档中删除所有 img 元素。循环访问文档并删除所有图像,这就是我想要的,但这只删除了 2 张图像,为什么?这是代码 JSBIN
.HTML
<img src="http://www.lorempixel.com/50/50" alt="pic">
<img src="http://www.lorempixel.com/50/50/animals" alt="pic">
<img src="http://www.lorempixel.com/50/50/city" alt="pic">
.JS
var imgElements = document.getElementsByTagName("img"); // HTMLCollection
for(var i=0; i<imgElements.length; i++) {
var img = imgElements[i];
img.remove();
}
有两件事让我担心该代码:
-
remove
是一种相对较新的 DOM 方法,没有得到很好的支持。为了获得更好的支持,请使用img.parentNode.removeChild(img);
-
getElementsByTagName
返回一个实时NodeList
,因此当您从列表开头删除元素时,所有其他元素都会向上移动。因此,如果列表有 5 个条目,并且您删除了i=0
元素,则所有其他元素都会移动,现在有一个新的i=0
元素(长度为4
)。您的循环将移动到i=1
,因此i=0
处的元素(以前位于i=1
处)不会被处理。对于非实时
NodeList
,请使用querySelectorAll('tagname')
(或只是向后循环列表,从末尾删除)。或者使用Array.prototype.slice
将NodeList
转换为数组。所有现代浏览器以及 IE8 都支持
querySelectorAll
。
下面是一个使用 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);
}
相关文章:
- 遍历类元素数组,并在jquery中选择同级元素
- 如何使用css动画/javascript使具有背景图像的元素出现
- 如何在上传前在浏览器中去除图像元数据(javascript)
- 如何获取内部动态加载图像的元素的高度
- 如何使用THree.js和webGL将交互式图像或元素嵌入到全景图像查看器中
- 没有图像的元素上的CSS掩码
- 图像/DIV 元素切换全屏
- 从HTML5 FileApi加载的图像中检索EXIF图像元数据
- 获取包含图像的元素的 $.height() 当图像可能尚未加载时
- 如何将要附加图像的元素传递到image.onload()函数中
- 无法使用exif获取图像元数据的属性
- 对于内部具有动画图像的元素,单击事件将丢失
- 如何覆盖一个没有白色背景图像的元素
- 如何使图像DOM元素响应
- 使用JavaScript编写图像元数据
- 何时检索包含图像的元素的高度
- 简单的方法添加图像的元素上的onclick事件javascript
- 单击鼠标,通过将类名从一个元素传递到下一个元素来更改图像
- 使用Javascript Regex获取元元素属性
- 如何在jQuery中存储多个输入图像的元素