利用 <style> 元素,咱们能够在网页中嵌入样式表。若是须要动态增长 <style> 元素,彷佛能够用以下的 JavaScript 代码:javascript
var style = document.createElement("style"); var head = document.getElementsByTagName("head")[0]; head.appendChild(style); style.type = "text/css"; style.id = "some-id"; style.innerHTML = css;
可是,这样直接用 style.innerHTML 有两个问题:一是在 IE 8- 这样使用会出现错误,二是样式表中的一些特殊字符可能会致使问题,改用 innerText 或者 textContent 也许更好。css
实际上,更稳妥的方法应该是从 css 内容建立一个子文本节点,而后添加到 style 元素中。例如:html
var style = document.createElement("style"); var head = document.getElementsByTagName("head")[0]; head.appendChild(style); style.type = "text/css"; style.id = "some-id"; if (style.styleSheet) { // IE8 style.styleSheet.cssText = css; } else { style.appendChild(document.createTextNode(css)); }
一样的,针对 IE8- 须要另外处理。java
建立了样式表以后,若是须要添加或者删除某个样式规则,能够用以下的方式:node
var style = document.getElementById("some-id"), sheet = style.sheet || style.styleSheet; if (sheet.insertRule) { sheet.insertRule("body: {color: green;}", 0); } else if (sheet.addRule) { sheet.addRule("body", "color: green;", 0); // IE8- } if (sheet.deleteRule) { sheet.deleteRule(0); } else if (sheet.removeRule) { sheet.removeRule(0); // IE8- }
其中的参数 0 表示所插入或者删除的样式规则的位置。一样的,在 IE8- 中没有标准的 style.sheet 以及 sheet.insertRule 和 sheet.deleteRule,因此咱们改用 IE 专有的方法。app
参考资料:
[1] Creating Style Node, and IE headaches - Stack Overflow
[2] CSSStyleSheet.insertRule - Web API Interfaces | MDN
[3] CSSStyleSheet.deleteRule - Web API Interfaces | MDN
[4] IHTMLStyleSheet::addRule method (Internet Explorer)
[5] IHTMLStyleSheet::removeRule method (Internet Explorer)dom