javascript - 访问CSS样式表的规则而不将样式表添加到头部

标签 javascript html css

我已经使用 AJAX 加载了样式表,该文件存储在数据变量中。现在我需要访问它的规则(它背后有一个功能)。我现在使用的解决方案是这样的:

stylesheet = document.createElement('style');
stylesheet.type = 'text/css';
stylesheet.innerHTML = data;

document.head.appendChild(stylesheet);
stylesheet = document.styleSheets[2]; // I know which one is my file

rules = stylesheet.rules || stylesheet.cssRules;

现在的问题是,当它添加到头部时,样式会应用到页面上。如何在不添加到头部的情况下执行相同的操作?

使用 Object.create(CSSStyleSheet.prototype) 尝试了各种操作,但无法完成...

最佳答案

我只需创建一个空的隐藏 iframe 并在其中附加样式表。这样它就不会影响任何东西,你仍然可以读取它的 cssRules。

例如:

stylesheet = document.createElement('style');
stylesheet.type = 'text/css';
stylesheet.innerHTML = data;

var iframe = document.createElement('iframe');
iframe.style.display = 'none';
document.body.appendChild(iframe);

var iframeDoc = iframe.contentWindow.document || iframe.contentDocument;
iframeDoc.body.appendChild(stylesheet);

stylesheet = iframeDoc.styleSheets[0];
rules = stylesheet.rules || stylesheet.cssRules;

演示: http://plnkr.co/edit/hlNlpzfRmLP8IYYwePeC?p=preview

关于javascript - 访问CSS样式表的规则而不将样式表添加到头部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28772200/

相关文章:

c# - asp.net mvc 添加本地文件到Web服务器

javascript - 如何在 AngularJS 中制作 Gmail 的分享按钮?

html - 为什么我的垂直滚动条不能根据标题 div 的高度正确显示

css - 在 GWT 中使用 CSS 设计所有按钮的样式

javascript - 如何仅在特定媒体查询上使用 jquery .css()?

javascript - 选择具有数据名称的所有标签 - 获取值 - 设置类

html - 滚动 DIV,我想要一个 100% 高度的 DIV

html - 选项文本的样式部分

html - 为什么我的 body 不适应网页上的内容

javascript - 我如何/我可以通过 javascript 访问 sessionid cookie?