Javascript 为什么可以';不能按顺序删除样式吗?
我修改了下面SO帖子中的问题/答案,以删除样式,按前进顺序 问题/答案按相反顺序删除脚本 它不起作用。然而,如果我把它改回相反的顺序,事情就成功了 我的猜测是,如果删除Javascript 为什么可以';不能按顺序删除样式吗?,javascript,Javascript,我修改了下面SO帖子中的问题/答案,以删除样式,按前进顺序 问题/答案按相反顺序删除脚本 它不起作用。然而,如果我把它改回相反的顺序,事情就成功了 我的猜测是,如果删除style[0],则style[1]将立即更新为style[0],在示例中,只有两种样式。因此,循环将失败 这是正确的吗 样式数组是否在修改时几乎同时更新 你的猜测是正确的getElementsByTagName返回一个实时“数组”(它实际上不是数组,而是一个节点列表或HTMLCollection,具体取决于浏览器和版本),反映
style[0]
,则style[1]
将立即更新为style[0],在示例中,只有两种样式。因此,循环将失败
这是正确的吗
样式数组是否在修改时几乎同时更新
你的猜测是正确的
getElementsByTagName
返回一个实时“数组”(它实际上不是数组,而是一个节点列表
或HTMLCollection
,具体取决于浏览器和版本),反映对DOM的后续更新
所以,你可以写:
var styles = document.getElementsByTagName("style");
while (styles.length) {
styles[0].parentNode.removeChild(styles[0]);
}
也就是说,没有理由选择这种方式。由于JavaScript在绘制UI的同一线程中运行,因此在循环完成之前,删除样式的结果不会生效,因此顺序对您来说并不重要
有用的MDN链接:
当然,HTMLCollection确实是实时的,但这只适用于某些DOM方法(这本身就相当混乱)。我认为您的猜测是正确的,但您在问题中加入了
样式
,在代码中加入了脚本
,您打算使用哪一种?或者你想要两个都像那样?可能是重复的
var styles = document.getElementsByTagName("style");
while (styles.length) {
styles[0].parentNode.removeChild(styles[0]);
}
var scripts = document.getElementsByTagName("script");
while (scripts.length) {
(scripts[0]).parentNode.removeChild(scripts[0]);
}