正则表达式删除背景颜色样式

时间:2014-04-27 18:01:05

标签: javascript regex

我想通过div中的文本来替换“background-color:[whatever];”随着“”发生的地方。基本上,我想删除所有内联背景颜色样式。

似乎是JavaScript的

             string.replace(regex,str) 

是正确的工具,但正则表达式首先找到“background-color:”,然后将其替换为后续并包含下一个“;”的内容用“”不清楚。

有人可能会朝着正确的方向推动我吗?

由于

3 个答案:

答案 0 :(得分:1)

您可以使用以下脚本执行此操作:

var all = document.body.getElementsByTagName('*');
for (var i=0;i<all.length;i++) {
    if (all[i].style.backgroundColor) {
        all[i].style.backgroundColor = '';
    }
}

我通过DOM循环而不是正则表达式的原因是有两个原因:

  • 如果您使用正则表达式,则必须使其适用于每种背景颜色,因此您必须匹配background-color:#fff;,还要background-color: /*either #fff; or #000;*/#fff;,因为可以放置注释那里也是。你需要太多的正则表达式来使它完美地工作,而这个脚本可以帮助你完成所有工作。
  • 通过修改HTML代码而不是DOM节点,您还将删除附加到元素的所有事件处理程序。这意味着其他脚本可能不再起作用,因为您已经删除了所有事件处理程序。

答案 1 :(得分:1)

我刚刚在JSFiddle中发布了一个快速,纯粹的JS,非正则表达式解决方案。它遍历元素的每个子元素(递归),如果它不是文本节点,则将background-color设置为transparent(有效地删除它)。

function removeChildBackgrounds(element) {
    var children = element.childNodes;
    for(var i = 0; i < children.length; i++) {
        var node = children[i];
        if(node.nodeName !== '#text') {
            node.style.backgroundColor = 'transparent';
            if(node.hasChildNodes()) {
                removeChildBackgrounds(node);
            }
        }
    }
}

请在此处查看JSFiddle


<强>链接:

答案 2 :(得分:0)

感谢Joey和Sam。

事实证明,乔伊的想法就是我所需要的。在转换为jQuery并利用了cellContent $是execCommand最后工作的外部div并且它总是将background-color放在<span>元素中的知识之后,它变成了:

cellContent$.find('span')
            .each(function() {
              if(this.style.background) {
                this.style.background = '';
              }
             });

感谢你们两位!

相关问题