通过JavaScript访问CSS文件内容

是否可以在文档中获取CSS文件的整个文本内容? F.ex:

  var cssFile = document.getElementById('css'); // get text contents of cssFile  

我不是真的通过document.styleSheets获取所有CSS规则,还有另外一种方法吗?

更新:当然有ajax选项,我很欣赏给出的答案。 但似乎没有必要使用已经在浏览器中加载的ajax重新加载文件。 因此,如果有人知道另一种方法来提取当前CSS文件的文本内容(不是CSS规则),请发布!

如果样式表包含在同一个域中,则可以使用简单的ajax get调用加载内容

更新后编辑
我尝试使用这个代码(在FX10上)作为概念certificate,它只对CSS使用了一个请求,但它对我来说似乎有些麻烦,应该进行测试和validation。 如果javascript不可用,它也应该通过一些后备来改进。

CSS(外部文件test.css

 div { border: 3px solid red;} 

HTML / jQuery的

        

您应该在div中看到带有红色边框的CSS代码:)
请享用。

使用该特定示例(CSS与页面位于同一域中),您可以通过ajax将文件作为文本读取:

 $.ajax({ url: "/path/to/file.css", dataType: "text", success: function(cssText) { // cssText will be a string containing the text of the file } }); 

如果要以更结构化的方式访问信息, document.styleSheets是与文档关联的样式表数组。 每个样式表都有一个名为cssRules的属性(或者只是某些浏览器上的rules ),它是样式表中每个规则的文本数组。 每个规则都有一个cssText属性。 所以你可以遍历那些,例如:

 $.each(document.styleSheets, function(sheetIndex, sheet) { console.log("Looking at styleSheet[" + sheetIndex + "]:"); $.each(sheet.cssRules || sheet.rules, function(ruleIndex, rule) { console.log("rule[" + ruleIndex + "]: " + rule.cssText); }); }); 

实例 – 该示例有一个带有两个规则的样式表。

我认为你最好的选择是用ajax加载它,例如:

 $.get("/path/to/file.css", function(cssContent){ alert("My CSS = " + cssContent); }); 

不使用ajax的情况下获得样式表的最接近的方法是迭代所有CSS规则并将它们连接成一个字符串。 这会产生原始文件,其中删除了所有注释和多余的空格。 这是有道理的,因为浏览器只需要将解析后的样式表保留在内存中,而不是原始文件中。 它只有3行代码:

 function css_text(x) { return x.cssText; } var file = document.getElementById('css'); var content = Array.prototype.map.call(file.sheet.cssRules, css_text).join('\n'); 

是的,你可以使用$ .get。

例:

 $.get('/path/to/css/file.css', function (resp) { // resp now should contain your CSS file content. }); 

如果您使用XMLHttpRequest加载页面,则可以访问这些文件,而无需再次加载它们。

最好不重复减少带宽和效率。

如果css是动态生成的,并且根据请求的时间而不同,该怎么办?