试图阅读styleSheets返回undefined

问题描述:

我已经搜索了一个答案,并没有解决方案似乎解决了这个问题,所以希望说明它具体将帮助我找到一个解决方案。试图阅读styleSheets返回undefined

我正在尝试使用document.styleSheets[0].cssText来读取第一个样式表的cssText,但它总是返回undefined。我确实有一个样式表,它显而易见,但JavaScript似乎没有认出它。

但是,当我使用<style>将样式表包含在页面内时,这样做是有效的。但是,我不明白为什么在使用<link>时会发生变化。它不仅放置在脚本之前,而且在页面完全加载后在全屏中使用javascript:alert(document.styleSheets[0].cssText)时甚至会返回undefined

感谢您的任何帮助。

编辑:这适用于任何方法document.styleSheets[0],包括那些应该在多种浏览器,并使用前<link>为我工作的。例如:document.styleSheets[0].cssRules[0].selectorText

根据quirksmode.org,document.styleSheets[n].cssText仅在IE中支持。

形式

document.styleSheets[n].cssRules[m].cssText 

似乎更广泛的支持,所以你可以刚刚超过该循环,并建立从各个规则的字符串。 (虽然你必须替换cssRules与IE的rules)。

+0

时使用了''

+0

我可以发誓它比IE支持更多。 – alex 2011-05-16 00:42:17

我说这个答案已经过时,但它可能对别人有用。 结果可能是“不确定的”,因为2个不同的原因:

一)在某些浏览器属性“cssRules”不工作(在符合http://www.javascriptkit.com/domref/cssrule.shtml,只为支持NS/Firefox浏览器)。对于其他浏览器,您应该使用属性“规则”,而不是。

您可以使用类似解决的问题:

if (document.styleSheets[0].cssRules) 
    crossrule=document.styleSheets[0].cssRules[0] 
else if (document.styleSheets[0].rules) 
    crossrule=document.styleSheets[0].rules[0] 

提取规则,之后,提取选择的名称:

document.styleSheets[0].cssRules[0].selectorText 

二)发行overpassing后a),你可能会遇到另一个问题:以@开头的规则,就像@ font-face的@import一样,被认为是规则。但是,它们的“selectorText”未定义。所以,你必须有办法跳过它们。我正在努力,现在。但我还没有找到解决办法。无论如何,这是一个知道它发生的方式的帮助。

希望这有助于