尝试读取styleSheets返回undefined

时间:2011-05-16 00:26:15

标签: javascript undefined stylesheet

我已经找到了答案,似乎没有任何解决方案可以解决这个问题,所以希望明确说明这个问题会帮助我找到解决方案。

我正在尝试使用document.styleSheets[0].cssText读取第一个样式表的cssText,但它总是返回undefined。我确实有一个样式表,它明显引人注目,但JavaScript似乎并不认识它。

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

感谢您的帮助。

修改:这适用于带有document.styleSheets[0]任何方法,包括那些应该在多个浏览器上工作并且在使用<link>之前为我工作的方法。例如:document.styleSheets[0].cssRules[0].selectorText

2 个答案:

答案 0 :(得分:1)

根据quirksmode.orgdocument.styleSheets[n].cssText仅在IE中受支持。

表格

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

似乎得到了更广泛的支持,因此您可以循环使用它并根据各个规则构建字符串。 (尽管您必须将cssRules替换为rules用于IE)。

答案 1 :(得分:1)

我认为这个答案已经过时了,但它可能对其他人有用。 由于两个不同的原因,结果可能是“未定义的”:

a)在某些浏览器中,属性“cssRules”不起作用(符合http://www.javascriptkit.com/domref/cssrule.shtml,仅适用于NS / Firefox)。对于其他浏览器,您应该使用属性“rules”,而不是。

您可以使用以下内容解决问题:

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

b)在问题a)的超越之后,你可能会遇到另一个问题:以@开头的规则,如@ font的@import,被视为规则。但是,它们的“selectorText”未定义。所以,你必须有一种方法可以跳过它们。我正在努力,现在。但我还没有找到解决方案。无论如何,知道它发生的方式是有帮助的。

希望这有帮助