Javascript 在JS对象上迭代未获取所有属性
当尝试迭代document.styleSheets时,它不会遍历每个属性Javascript 在JS对象上迭代未获取所有属性,javascript,css,dom,Javascript,Css,Dom,当尝试迭代document.styleSheets时,它不会遍历每个属性 当控制台记录document.styleSheets时会出现这种情况 StyleSheetList {0: CSSStyleSheet, 1: CSSStyleSheet, length: 2, item: function} 0: CSSStyleSheet 1: CSSStyleSheet 2: CSSStyleSheet length: 3 迭代这些属性会给我 0 element
当控制台记录document.styleSheets时会出现这种情况
StyleSheetList {0: CSSStyleSheet, 1: CSSStyleSheet, length: 2, item: function}
0: CSSStyleSheet
1: CSSStyleSheet
2: CSSStyleSheet
length: 3
迭代这些属性会给我
0 elementLoader.js:11
1 elementLoader.js:11
length elementLoader.js:11
似乎最后一个样式表是不可枚举的,但我不知道为什么,它恰好是我希望看到的
有什么想法吗
我正在运行的代码:
var styleSheets = document.styleSheets;
console.log(styleSheets);
for (var i in styleSheets)
{
console.log(i);
}
在本例中,打印document.styleSheets[2]返回null
解决方案:
结果是angular在耍花招。通过在指令中而不是脚本标记中加载代码,我能够迭代所有样式表。多么奇怪的错误。您是否正在尝试这样做:
var styleSheets = document.styleSheets;
console.log(styleSheets);
for (var i in styleSheets)
{
console.log(styleSheets[i]); // Log stylesheet instead of index
}
让我们详细分析一下你迄今为止向我们展示的内容 第1部分。
StyleSheetList {0: CSSStyleSheet, 1: CSSStyleSheet, length: 2, item: function}
上面的内容似乎就是您在console.log中看到的内容,然后扩展此对象以查看内容,然后再查看(如@Barmar所建议的)
这表明您已经在原始日志记录之后加载了样式表
第二部分
您在样式表列表上使用枚举而不是迭代,并发布了一个副本粘贴
0 elementLoader.js:11
1 elementLoader.js:11
length elementLoader.js:11
这需要清理,因为elementLoader.js:11
是复制粘贴的一部分,而不是实际的日志,并且您已经完成了
0
1
length
与加载后一个样式表之前第一次记录的内容相匹配
请注意,您看到的length
属性名称是ennumerable,您不会看到这是您使用的迭代。事实证明angular是在耍花招。通过在指令中而不是脚本标记中加载代码,我能够迭代所有代码2
行从何而来?它不在console.log的第一行。你能展示一下你在做什么来获得每个输出吗?拿出我正在运行的代码建议-StyleSheetList
是一个类似数组的对象(有length
和整数作为索引),使用数组类型迭代而不是对象枚举。console.log
的第一行仅显示2个样式表,就像枚举一样。我猜剩下的就是当你点击披露三角时,对吗?当我在这里这样做的时候,我看到了与第一行相同的两个样式表。我猜是有东西在动态地修改样式表,而您在有第三个样式表的时候披露了它。我记录索引只是为了显示返回的内容。如果我显示实际的样式表,我只会从列表中得到前两个。如前所述,我只想显示在枚举过程中给出了对象的哪些属性。此外,样式列表本身没有改变,因为我可以在枚举前后使用相同的内容打印它。我只是试着把它放到JSFIDLE上,看看是否存在相同的错误,但它没有。也许是因为我在使用anuglar?如果没有更多的信息或演示,就不可能再进一步了。
0
1
length