通过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是动态生成的,并且根据请求的时间而不同,该怎么办?