Javascript正则表达式根据其选择器从样式标签中定位和删除CSS规则?

标签 javascript css regex

我可以使用什么正则表达式来根据我通过 JavaScript 提供的选择器从内联样式表中完全删除 CSS 规则?

例如,我获取样式标签的内容,它包含一条规则:

.some_class
{
    color: #FFF;
    font-style: italic;
}

如果我提供选择器“.some_class”,正确的 regex/js 方法是什么,它将找到该选择器的任何出现并删除它、其关联的括号以及这些括号内的所有属性/值

最佳答案

考虑正确使用 DOM API 来实现您想要的目的,而不是使用可能效果不佳的复杂正则表达式:

function deleteRule(selector) {
    // Get the collection of stylesheets and iterate over them
    var ss = document.styleSheets;

    // Exit if no stylesheets
    if (!ss.length)
        return;

    // Create an uppercase tagname version of our selector for IE
    var uSelector = selector.replace(/^[a-z]+|\s+[a-z]+/gi, function ($0) {
        return $0.toUpperCase();
    });

    // Create a map so we don't get SO's code block scrollbars involved
    var map = {};
    map[selector] = map[uSelector] = 1;

    // `deleteRule` for standards, `removeRule` for IE
    var del = "deleteRule" in ss[0] ? "deleteRule" : "removeRule";

    for (var a = 0, maxA = ss.length; a < maxA; a++) {
        // `cssRules` for standards, `rules` for IE
        var rules = ss[a].cssRules || ss[a].rules;

        for (var b = 0, maxB = rules.length; b < maxB; b++) {
            // Check for selector existence in our map
            if (rules[b].selectorText in map)
                ss[a][del](b);  // remove using our stored delete method
        }
    }
}

​ 请记住,浏览器可能会重新格式化样式表规则的选择器以包含空格(因此 body>div.selector 变为 body > div.selector)。您应该尝试使 CSS 选择器中的空白尽可能保持一致。如果要从特定样式表而不是所有样式表中删除规则,请消除第一个 for 循环并指定样式表对象。

Example

关于Javascript正则表达式根据其选择器从样式标签中定位和删除CSS规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3086917/

相关文章:

c# - 用于捕获不跟随其他字符的数字模式的正则表达式

php - 共享服务器用户上传进度条的最佳解决方案

javascript - 如何检查复选框是否在 extjs 中被选中?

css - 带有固定标题的纯 CSS 滚动 UL LI 表

regex - 如何评估 Julia 中被正则表达式替换的函数?

python - 如何在cp1251编码的文件中将 'fancy'标点符号与Python中的RegEx匹配?

javascript - 为什么 Highstock 初始化将系列变量设置为 null?

javascript - 类型错误 : Cannot read property 'state' of undefined

html - Mobile Safari 中的 Z-Index 问题

javascript - 为什么我的网站上不能有超过 1-2 个谷歌地图?