RegEx问题 - HTML标记内容

时间:2010-12-20 13:04:15

标签: javascript regex

我想通过JavaScript将<body>中的所有“i”字符替换为“I”。 (例如:<div id="123">Hi! it!</div>应更改为<div id="123">HI! It!</div>)。 我知道我必须使用正则表达式。但我不知道应该写些什么。 你能帮助我吗? 谢谢..

2 个答案:

答案 0 :(得分:3)

我刚刚回答了一个类似的问题,可以帮助您:JQuery/Javascript - Search DOM for text and insert HTML

对于这种特殊情况,您可以简化。

<强>更新

我添加了filter参数,以便您筛选出特定节点的后代。这应该是一个函数,它接受一个DOM节点参数并返回一个布尔值:true来替换节点及其后代中的文本,false忽略节点及其后代。

function replaceText(node, regex, replacementText, filter) {
    if (node.nodeType == 3) {
        node.data = node.data.replace(regex, replacementText);
    } else if (!filter || filter(node)) {
        var child = node.firstChild;
        while (child) {
            replaceText(child, regex, replacementText, filter);
            child = child.nextSibling;
        }
    }
}

function scriptAndStyleFilter(node) {
    return node.nodeType != 1 || !/SCRIPT|STYLE/i.test(node.nodeName);
}

replaceText(document.body, /i/g, "I", scriptAndStyleFilter);

答案 1 :(得分:1)

这是一个替代方案,使用CSS,jQuery和Highlight plugin

CSS:

.highlight {text-transform:uppercase;}

JavaScript的:

$('body').highlight('i');

工作示例:http://jsbin.com/okavo4

这是一个快速示例,但您可以使用源代码获取所需内容,以防您需要更复杂的内容。在您的身体来源上使用正则表达式是错误的,特别是在浏览器的上下文中,您已经有一个已解析的DOM结构。