Dynamically remove elements in javascript(动态删除Java脚本中的元素)
问题描述
我使用的是普通的旧Java脚本(没有jQuery或其他)。
我有一个HTML5应用程序,我想要从节元素中删除画布:
<section id="thumbnails">
<h1>My Bookmarks:</h1>
<canvas height="60px" width="100px" data-time="2.1167500019073486"></canvas>
<canvas height="60px" width="100px" data-time="3.60492205619812"></canvas>
<canvas height="60px" width="100px" data-time="4.558893203735352"></canvas>
<canvas height="60px" width="100px" data-time="5.411310195922852"></canvas>
</section>
我使用的代码如下:
document.getElementById('videos').addEventListener('change',function(e){
var canvasElements=document.getElementById('thumbnails').getElementsByTagName('canvas');
for(var i=0;i<canvasElements.length;i++){
document.getElementById('thumbnails').removeChild(canvasElements[i]);
console.log('removed canvas');
}
},true);
但是,当代码运行时,并不是所有画布都从该部分中删除,我甚至在控制台中看不到日志语句。
转到此页面,获取一些缩略图,然后切换到另一个视频:http://laurent-tonon.com/VideoFinal/
我真的不明白...
感谢大家抽出时间
推荐答案
问题是getElementsByTagName
返回一个动态节点列表,当您删除这些项时,该列表将在您下方更改。您可以通过以相反的顺序处理数组来解决此问题,这样当您删除项目时,nodeList中唯一更改的部分是您已经处理的部分,而不是您仍要处理的部分:
document.getElementById('videos').addEventListener('change',function(e){
var canvasElements=document.getElementById('thumbnails').getElementsByTagName('canvas');
for (var i = canvasElements.length - 1; i >= 0; i--) {
canvasElements[i].parentNode.removeChild(canvasElements[i]);
console.log('removed canvas');
}
},true);
像您所做的那样以正向顺序处理它会导致您删除所有其他项目,并留下一半的项目。您可以删除第一个项目。它将从nodeList中删除,将nodeList中的每一项向下移动一个槽。然后将索引前进到[1],并删除最初的第三项(但现在位于数组的第二个槽中)。最初是第二项的项现在位于数组的第一个插槽中,您永远不会最终将其删除。
颠倒处理nodeList的顺序可以解决该问题,因为从数组中删除的节点位于末尾,并且不会更改您仍要处理的节点的位置。
我知道这不是一个jQuery问题,用上面的普通脚本完全可以解决,但就在这样的时候,我被提醒在jQuery中做一些事情是多么容易:
$("#thumbnails canvas").remove();
这篇关于动态删除Java脚本中的元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:动态删除Java脚本中的元素
基础教程推荐
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 在for循环中使用setTimeout 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 响应更改 div 大小保持纵横比 2022-01-01
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 我什么时候应该在导入时使用方括号 2022-01-01
- 动态更新多个选择框 2022-01-01