我遇到了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/

10-09 20:57