JavaScript:为什么要在循环中进行两次迭代以删除 DOM 中的所有 iframe 元素

用户9303970

我在这里遇到了这个循环,用于使用iframevanilla JS删除DOM中的所有元素:

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]两次,但一次这样就不会有所谓的“重复”。

对不起,如果我写的任何东西看起来很荒谬。

jfriend00

因为如果你只有子节点,你需要它两次。你需要:

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();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章