我遇到了this loop here,用于使用香草JS删除DOM中的所有iframe
元素:
var iframes = document.querySelectorAll('iframe');
for (var i = 0; i < iframes.length; i++) {
iframes[i].parentNode.removeChild(iframes[i]);
}
在循环的最后一行中,为什么作者两次通过
iframes
变量将集合的迭代作为目标?换句话说,为什么语法是
iframes[i].parentNode.removeChild(iframes[i]);
而不是伪代码removeChild(iframes[i])
这样更简单的东西?我想知道是否可以在不使用两次
iframes[i]
的情况下以较短的方式完成此操作,但是一旦使用,就不会有所谓的“重复”。对不起,我写的东西似乎荒谬。
最佳答案
因为如果您只有子节点,则需要两次。你需要:
parent.removeChild(child)
但是,如果没有父母,则必须使用
child.parentNode
从孩子那里获得父母,如下所示:child.parentNode.removeChild(child);
代码中的
iframes[i]
是child
。请注意,代码的详细版本可能会更加明显:
var iframes = document.querySelectorAll('iframe');
var child, parent;
for (var i = 0; i < iframes.length; i++) {
child = iframes[i];
parent = child.parentNode;
parent.removeChild(child);
}
注意:在现代浏览器中,您可以执行以下操作:
child.remove()
您的代码中将是:
iframes[i].remove()
正是为了防止
.removeChild()
经常需要冗余引用而添加的。我想知道是否可以在不使用iframes [i]两次的情况下以较短的方式完成操作,但是一旦这样做就不会有所谓的“重复”。
在现代浏览器中,可以执行以下操作:
var iframes = document.querySelectorAll('iframe');
for (var i = 0; i < iframes.length; i++) {
iframes[i].remove();
}
关于javascript - JavaScript:为什么要在循环中定位两次迭代以删除DOM中的所有iframe元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50283557/