Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在JS对象上迭代未获取所有属性_Javascript_Css_Dom - Fatal编程技术网

Javascript 在JS对象上迭代未获取所有属性

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时,它不会遍历每个属性


当控制台记录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