javascript - 第一条规则未正确附加到 CSS JavaScript 函数上?

标签 javascript

此函数允许您添加 CSS 规则并将规则放入样式表中,但它有一个附加问题。首先是代码,然后是解释。

var addCSSRule = function(sheet, selector, rules){
//Backward searching of the selector matching cssRules
   var index=sheet.cssRules.length - 1;
   for(var i=index; i>0; i--){
     var current_style = sheet.cssRules[i];
     if(current_style.selectorText === selector){
       //Append the new rules to the current content of the cssRule;
       rules=current_style.style.cssText + rules;
       sheet.deleteRule(i);
       index=i;
     }
   }
   if(sheet.insertRule){
     sheet.insertRule(selector + "{" + rules + "}", index);
   }
   else{
     sheet.addRule(selector, rules, index);
   }
   return sheet.cssRules[index].css;
   }

addCSSRule(myStyleSheet, "#container", "height: 300px;");
addCSSRule(myStyleSheet, "#container", "width: 300px;");
addCSSRule(myStyleSheet, "#container", "border: 2px solid blue;");
addCSSRule(myStyleSheet, "#container", "background-color: red;");

公平地说,这个不是我想出来的。我在网站上找到了这个http://davidwalsh.name/add-rules-stylesheets 。然而它有一个问题。除了第一条规则之外,规则按照应有的方式附加。它附加得很好,也就是说,该规则被识别,但是每当您检查元素时,它都不符合所有其他规则。见下图。基本上,第一条规则不是像所有其他规则一样正确附加。

notice append problem

最佳答案

已经晚了,所以我没有弄清楚你的函数出了什么问题,而是为你创建了一个新函数,这里有一个 demo ,它的工作原理是一样的。

JavaScript

function setRule(sheet,selector,rules){
    var cssrules = sheet.cssRules;
    for( var i = 0 , l = cssrules.length ; i < l ; i ++ ){
        var cssrule = cssrules[i];
        var cssselector = cssrule.selectorText;
        if( cssselector == selector ){
            var rules = rules.split(";");
            for( var j = 0 , rl = rules.length ; j < rl ; j ++ ){
                var rule = rules[j];
                var parts = rule.split(":");
                var property = parts[0];
                var value = parts[1];
                cssrule.style[property] = value;
            }
            return;
        }
    }
    sheet.insertRule(selector + "{" + rules + "}",cssrules.length);
}

用法

var sheet = document.styleSheets[0];
setRule(sheet,"div","background:red;width:200px;height:200px;");

正如您所看到的,它的功能与另一个类似,在演示中实际上有一个 setTimeout 调用来演示插入规则后更改规则的能力。

希望对你有帮助,如果你还想让我修复其他功能,请告诉我,我早上就会修复,晚安!

更新:这是 demo以您的示例为例,以防万一:)

关于javascript - 第一条规则未正确附加到 CSS JavaScript 函数上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28654886/

相关文章:

javascript - 根据渐变html5 Canvas 改变颜色

javascript - 为什么经常使用 new Parent() 而不是 Object.create(Parent.prototype) 来初始化 child 的原型(prototype)?

javascript - 使用 require.js 进行跨域调用时出现问题?

javascript - 自动将文本框值设置为 <a href>

JavaScript 从非 ES6 类覆盖到 ES6 类

javascript - 无法将图像元素从一个文件传输到另一个文件

javascript - 使用 node.js 监控连接的客户端

Javascript 重定向与 Pound 在 Wordpress 中不起作用

java - Favicon 在 FireFox 中不显示

javascript - ajax 的 Keydown 事件可以吗?