使用javascript创建createStyleSheet函数(最终解决方案?)
我读到Cristoph在哪里做了一个添加样式表的函数。我认为这是一个很好的主意,但效果不太好。例如:使用javascript创建createStyleSheet函数(最终解决方案?),javascript,css,Javascript,Css,我读到Cristoph在哪里做了一个添加样式表的函数。我认为这是一个很好的主意,但效果不太好。例如: if(typeof document.createStyleSheet === 'undefined') { document.createStyleSheet = (function() { function createStyleSheet(href) { if(typeof href !== 'undefined') {
if(typeof document.createStyleSheet === 'undefined') {
document.createStyleSheet = (function() {
function createStyleSheet(href) {
if(typeof href !== 'undefined') {
var element = document.createElement('link');
element.type = 'text/css';
element.rel = 'stylesheet';
element.href = href;
}
else {
var element = document.createElement('style');
element.type = 'text/css';
}
document.getElementsByTagName('head')[0].appendChild(element);
var sheet = document.styleSheets[document.styleSheets.length - 1];
if(typeof sheet.addRule === 'undefined')
sheet.addRule = addRule;
if(typeof sheet.removeRule === 'undefined')
sheet.removeRule = sheet.deleteRule;
return sheet;
}
function addRule(selectorText, cssText, index) {
if(typeof index === 'undefined')
index = this.cssRules.length;
this.insertRule(selectorText + ' {' + cssText + '}', index);
}
return createStyleSheet;
})();
}
document.createStyleSheet( 'css/test.css' );
var sheet = document.createStyleSheet();
sheet.addRule('h1', 'background: red;');
console.log( sheet );
当我添加外部文件,然后添加没有名称的样式表时,该函数至少在chrome中不能正常工作。在图纸中,变量存储为默认的镀铬样式表:
CSSStyleSheet {rules: CSSRuleList, cssRules: CSSRuleList, ownerRule: null, media: MediaList, title: null…}
cssRules: CSSRuleList
0: CSSStyleRule
1: CSSStyleRule
2: CSSStyleRule
3: CSSStyleRule
...
627: CSSStyleRule
628: CSSStyleRule
length: 629
__proto__: CSSRuleList
disabled: false
href: null
media: MediaList
ownerNode: style
ownerRule: null
parentStyleSheet: null
rules: CSSRuleList
title: null
type: "text/css"
__proto__: CSSStyleSheet
我不知道为什么会出现这个问题。有人知道吗
编辑:澄清源代码的概念
谢谢 您是在调用createStyleSheet时带参数还是不带参数?你能摆弄一下吗?这可能不是个好主意,因为样式表将嵌入发送到浏览器的HTML中,因此不太可能利用缓存、压缩、有问题的可重用性,并使其成为维护噩梦。很抱歉没有回答你的问题。@Janfohe:我打电话给createStyleSheet时有无争论。createStyleSheet只能在有或没有的情况下调用。@Kane这可能是一个相当不错的性能胜利。如果必须同时动态地重新设置大量DOM节点的样式(即,以一种无法通过将预定义类附加到父节点来完成的方式),那么设置一个样式规则应该比手动逐个遍历和操作它们快得多。