我尝试使用$.cssRule() 插件 http://plugins.jquery.com/project/jquerycssrule并发现在 FireBug 中调试这些规则很不方便,因为每个规则似乎都附加到我的页面上加载的每个 css 文件,因此定义了很多次。
源代码 http://projects.pro.br/gsaraiva/wp-content/uploads/2009/06/jquery.cssRule.js表明它是在 for 循环中故意这样做的: for(var i = 0; i
为什么它不能添加新的自己的样式表,然后向其中添加规则?
如果规则优先级是必要的,那么为什么不打乱样式表呢?
我注意到同样的问题here https://stackoverflow.com/questions/622122/how-can-i-change-the-css-class-rules-using-jquery/622193#622193所以除非这两个地方来自有错误的同一来源,否则我想知道为什么有必要这样做。
我想我记得为什么我在您链接的答案中这样做。我不只是添加新规则,而是向现有声明添加新规则。所以我必须查找每个样式表才能找到该声明。现在,我现在能想到的最好的优化就是阅读styleSheets
以相反的顺序,并在第一次遇到该循环后中断循环selectorText
。这样,您只需修改一个样式表,即具有最高优先级的样式表。
var ss = document.styleSheets;
for (var i=ss.length-1; i>=0; i--) {
var rules = ss[i].cssRules || ss[i].rules;
for (var j=0; j<rules.length; j++) {
if (rules[j].selectorText === ".classname") {
rules[j].style.color = "green";
break;
}
}
}
无论如何,这假设集合中样式表对象的顺序与优先级顺序相反,我相信确实如此。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)