我已经找到了答案,似乎没有任何解决方案可以解决这个问题,所以希望明确说明这个问题会帮助我找到解决方案。
我正在尝试使用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
答案 0 :(得分:1)
根据quirksmode.org,document.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”未定义。所以,你必须有一种方法可以跳过它们。我正在努力,现在。但我还没有找到解决方案。无论如何,知道它发生的方式是有帮助的。
希望这有帮助