直接从body标签中删除没有被另一个父HTML元素包装的元素
remove desired elements directly from body tag which are not wrapped by another parent html element
我只是在试验是否有可能删除未被另一个元素包装并且我可以通过getElementById()
方法访问的所需元素。这里我放了两个段落标签和一个按钮。我附加了一个onclick
事件,它应该删除段落元素,但它们并没有完全删除。它一个接一个地删除它们,我的意思是我必须点击两次按钮来删除所有两个段落标签。如何解决这个问题?
<html>
<head>
<style>
</style>
</head>
<body>
<p>ddd</p>
<p>fff</p>
<input type='button' value='remove all elements' onClick="removeall()">
<script>
function removeall(){
var para=document.getElementsByTagName('P');
alert(para.length);
for(i=0;i<para.length;i++){
document.body.removeChild(para[i]);
}
}
</script>
</body>
代码的问题是,每次从数组中删除一个元素时,数组(实际上不是一个数组,而是一个活动集合)的长度都会减少。所以你会用for
循环去除了一半的<p>
元素。您可以使用while
循环,并删除数组的第一个元素,直到数组为空。
这是正确的代码:
function removeall() {
var para = document.getElementsByTagName('P');
while(para.length) para[0].parentNode.removeChild(para[0]);
}
以上代码将删除所有文档中的<p>
元素。在你的代码中,你使用document.body.removeChild(...)
,它工作得很好,但不是很好,因为如果一些<p>
元素在另一个元素内部(不是直接在<body>
内部),它将不会被删除,它会导致错误。
所以如果你只想从body中删除<p>
元素,你可以这样做:
function removeall_frombody() {
var para = document.querySelectorAll('body > p');
while(para.length) document.body.removeChild(para[0]);
}
这里的问题是para
是一个活动集合。因此,当您删除第一段时,para
改变并成为仅包含一个元素的集合,终止for
循环,因为para.length
变为1。
要避免这种情况,请将集合转换为数组:
function removeall(){
var para = [].slice.call(document.getElementsByTagName('P'));
for(var i = 0; i < para.length; i++){
document.body.removeChild(para[i]);
}
}
或者从末尾开始迭代:
for (var i = para.length; i--;)
document.body.removeChild(para[i]);
其他人建议使用while
循环:它也很好。
相关文章:
- 使用clickToggle并在单击另一个元素时关闭元素
- 按我自己的类克隆另一个元素的内容和顺序
- 如何通过HTML+CSS中的另一个元素Selector更改元素的属性值
- 使用svg和javascript将一个类的元素动画化为另一个类
- 将html元素插入到文本字符串中,以匹配另一个html字符串
- jQuery-将列表项的一个元素移动到同一项的另一个元素中+对我的列表中的每个项执行此操作
- jquery从另一个元素中移除移除
- DIV怎么能像Javascript中的另一个元素一样工作呢
- 使用数据属性将HTML数据复制到另一个元素
- 如何从另一个带下划线的数组中筛选带元素的数组
- 将鼠标悬停在Angular JS中的一个元素上,并将Class添加到另一个元素中
- 在类JavaScript选择的另一个元素中选择一个标记元素
- 只要存在,就用另一个元素替换一个元素
- 检查一个元素是否有一个类与另一个类总是返回true
- 初学者反应查询(如何删除一个元素并附加另一个元素)
- 将jquery ui窗口的父元素设置为另一个元素
- 如何激活下拉菜单:在一个元素上单击768px宽度下方,在另一个元素上将鼠标悬停在768px上方
- Pixijs将元素附加到另一个元素
- 将SVG元素拖动到另一个SVG元素上
- JavaScript:将输入范围行为链接到另一个元素