迭代JS对象没有得到所有属性

时间:2014-05-08 23:24:16

标签: 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 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。



解决方案:
转过来,角度正在拉动一些诡计。通过在代码中加载代码而不是脚本标记,我能够迭代所有样式表。多么奇怪的错误。

3 个答案:

答案 0 :(得分:0)

您是否尝试这样做:

var styleSheets = document.styleSheets;
console.log(styleSheets);
for (var i in styleSheets)
{
    console.log(styleSheets[i]); // Log stylesheet instead of index
}

答案 1 :(得分:0)

让我们分解你到目前为止向我们展示的内容。

<强>第1部分

StyleSheetList {0: CSSStyleSheet, 1: CSSStyleSheet, length: 2, item: function}

以上似乎就是你在console.log中看到的内容,然后你展开这个对象来查看内容然后你看到了(正如@Barmar建议的那样)。

    0: CSSStyleSheet
    1: CSSStyleSheet
    2: CSSStyleSheet
    length: 3

这表示您在原始日志记录后加载了样式表。

第2部分

您在StyleSheetList上使用枚举而不是迭代,并发布了复制粘贴

0 elementLoader.js:11
1 elementLoader.js:11
length elementLoader.js:11

需要清理哪个,因为elementLoader.js:11是复制粘贴的一部分,而不是实际的日志,而且你有。

0
1
length

与之前加载样式表之前首次记录的内容相匹配。

请注意,您看到length属性名称是可枚举的,您不会看到这是您使用迭代。

答案 2 :(得分:0)

转过来,角度正在拉动一些诡计。通过在代码中加载代码而不是脚本标记,我能够迭代所有