Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript创建createStyleSheet函数(最终解决方案?)_Javascript_Css - Fatal编程技术网

使用javascript创建createStyleSheet函数(最终解决方案?)

使用javascript创建createStyleSheet函数(最终解决方案?),javascript,css,Javascript,Css,我读到Cristoph在哪里做了一个添加样式表的函数。我认为这是一个很好的主意,但效果不太好。例如: if(typeof document.createStyleSheet === 'undefined') { document.createStyleSheet = (function() { function createStyleSheet(href) { if(typeof href !== 'undefined') {

我读到Cristoph在哪里做了一个添加样式表的函数。我认为这是一个很好的主意,但效果不太好。例如:

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节点的样式(即,以一种无法通过将预定义类附加到父节点来完成的方式),那么设置一个样式规则应该比手动逐个遍历和操作它们快得多。