javascript - 为什么 jQuery.cssRule 插件必须向所有样式表添加规则?

标签 javascript jquery css jquery-plugins

我尝试使用 $.cssRule() plugin并发现在 FireBug 中调试这些规则很不方便,因为每个规则似乎都附加到我页面上加载的每个 css 文件,因此定义了很多次。

Source code表明它在 for 循环内是故意这样做的:for(var i = 0; i < document.styleSheets.length; i++) ... insertRule ...

为什么它不能添加新的自己的样式表,然后向其中添加规则?

如果有必要对规则进行优先级排序,那为什么不打乱样式表呢?

我注意到同样的问题 here所以除非这两个地方来自同一个有错误的来源,否则我想知道为什么有必要那样做。

最佳答案

我想我记得我为什么在您链接到的答案中这样做。我不只是添加新规则,而是向现有声明添加新规则。所以我必须查找每个样式表才能找到该声明。现在,我现在能想到的最佳优化是以相反的顺序读取 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;
        }
    }
}

无论如何,这假设集合中样式表对象的顺序与优先顺序相反,我相信是这样。

关于javascript - 为什么 jQuery.cssRule 插件必须向所有样式表添加规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2300084/

相关文章:

php - NicEdit html 编辑器,用于管理动态添加/删除文本区域

javascript - 使用PapaParse和collectionFS在meteor中生成可下载的csv文件

javascript - 将 2 个参数在 2 个不同的复选框中传递给一个函数

javascript - 如果传递了 DateTime 变量,则使用 Javascript 更改 Div 类

jquery - vex 确认对话框,默认取消操作

html - 添加额外元素时标题和正文之间奇怪的额外间距

html - 即使在我将 br 和 hr 放在图像之后,图像也会覆盖我的内容

javascript - 如何使用 CSS position 属性对元素进行分层?

javascript - 修复正则表达式以不从文本中重新抓取旧 URL (JS)

javascript - CDN/和/或在服务器上托管js和css文件