javascript - 为什么不能按前向顺序删除样式?

标签 javascript

我修改了下面 SO 帖子中的问题/答案以删除样式,按顺序。

问题/答案以相反的顺序删除脚本。

它没有用。但是,如果我将其改回倒序,一切都会奏效。

我的猜测是,如果您删除 style[0]style[1] 会立即更新为 style[0],在一个示例中 w/只有两种风格。因此循环会失败。

这是正确的吗?

样式数组在修改时是否几乎立即更新?

Reference Post

var scripts  = document.getElementsByTagName("script");
for (var i=scripts.length; i--; ){
   (scripts[i]).parentNode.removeChild(scripts[i]);
}

最佳答案

你猜对了; getElementsByTagName 返回一个事件“数组”(实际上不是数组,而是一个NodeListHTMLCollection,取决于浏览器和版本)反射(reflect)对 DOM 的后续更新。

所以,你可以这样写:

var styles = document.getElementsByTagName("style");
while (styles.length) {
    styles[0].parentNode.removeChild(styles[0]);
}

也就是说,没有理由偏爱这种方式。由于 JavaScript 在绘制 UI 的同一线程中运行,删除样式的结果在循环完成后才会生效,因此顺序对您来说无关紧要。

有用的 MDN 链接:

关于javascript - 为什么不能按前向顺序删除样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17949975/

相关文章:

javascript - 在javascript中获取通用时区?

javascript - 如何删除 javascript 中的所有点击处理程序

java - 如何从 Javascript 调用 GWT java 函数?

javascript - 是否可以使用 jquery 和 split 方法跳过 html 标签?

javascript - 连续设置4张图片而不是2张图片

javascript - 尝试在 JSON 数据中提供 JSON 字符串时,JSON 格式给出错误

javascript - 修复一个递归函数,该函数采用包含其他数组在内的元素的数组。它生成一个没有其他数组作为元素的数组

javascript - 禁用 textarea 中由 javascript 定义的 keydown 事件并恢复默认行为

javascript - 根据 url 显示/隐藏 div

javascript - 我想在单击一个 div 时隐藏所有其他 div