Dom 我能';t通过JavaScript删除页面中的所有段落 HTML5文档
一, 二, 三, 四, 五, 六, 七, 八, 九, 十, 十一, 十二, //单击文档时,下面的代码应删除页面中的所有段落。 //页面中有12个段落,但下面的代码只能删除其中6个段落。 document.addEventListener('click',函数(){ 变量i,allParagraphElements=document.getElementsByTagName('p'); log('allParagraphElements.length:'+allParagraphElements.length); 对于(i=0;iDom 我能';t通过JavaScript删除页面中的所有段落 HTML5文档,dom,iteration,addeventlistener,removechild,getelementsbytagname,Dom,Iteration,Addeventlistener,Removechild,Getelementsbytagname,一, 二, 三, 四, 五, 六, 七, 八, 九, 十, 十一, 十二, //单击文档时,下面的代码应删除页面中的所有段落。 //页面中有12个段落,但下面的代码只能删除其中6个段落。 document.addEventListener('click',函数(){ 变量i,allParagraphElements=document.getElementsByTagName('p'); log('allParagraphElements.length:'+allParagraphElements
我如何解决这个问题?谢谢。
.getElementsByTagName
返回一个实时节点列表,当您更改它所代表的基础子树时,该节点列表会自动更新。基本上,当您删除元素时,.length
也会改变,循环将“过早”结束
您可以使用.querySelectorAll
来获取静态节点列表
还可以将节点列表转换为数组,其行为也类似于静态节点列表:
allParagraphElements = document.querySelectorAll('p');
.getElementsByTagName
返回一个活动节点列表,当您更改它所代表的基础子树时,该节点列表会自动更新。基本上,当您删除元素时,.length
也会改变,循环将“过早”结束
您可以使用.querySelectorAll
来获取静态节点列表
还可以将节点列表转换为数组,其行为也类似于静态节点列表:
allParagraphElements = document.querySelectorAll('p');
您可以从上到下迭代: 迭代一: 12段,索引=0 索引0处的段落已删除,而段落1现在位于索引0处 第二次迭代: 11段,索引=1 删除索引1处的段落,第2段现在位于索引1处
你知道怎么了吗?你只删除了一半的段落 反过来迭代,所有段落都会被删除
您可以从上到下迭代: 迭代一: 12段,索引=0 索引0处的段落已删除,而段落1现在位于索引0处 第二次迭代: 11段,索引=1 删除索引1处的段落,第2段现在位于索引1处
你知道怎么了吗?你只删除了一半的段落 反过来迭代,所有段落都会被删除
小提琴很好,但用户不必只点击鼠标查看代码的基本原理。请尽可能将代码作为问题的一部分发布。什么是
1
意思?p
标记在哪里结束?@d4rkpr1nc3:关闭
标记是可选的。不能有嵌套的
元素。小提琴很好,但是用户不应该只需要点击鼠标就可以看到代码的基本原理。请尽可能将代码作为问题的一部分发布。什么是1
意思?p
标记在哪里结束?@d4rkpr1nc3:关闭
标记是可选的。不能有嵌套的
元素。某些版本的IE不了解addEventListener
。你应该考虑一下consideration@d4rkpr1nc3那不是我的密码,是OP的密码。我在这里不是要回顾OP代码中不相关的部分,除非它们确实是错误的:IE的PSome版本不知道addEventListener
。你应该考虑一下consideration@d4rkpr1nc3那不是我的密码,是OP的密码。我来这里不是为了回顾OP代码中不相关的部分,除非它们真的错了:P
allParagraphElements = [].slice.call( document.getElementsByTagName('p') );