2

使用 javascript,我需要解析页面的 HTML,并将所有出现的 ABC 替换为内容块中出现的 ABC,例如<p>ABC Company lorem ipsum</p>将更改为<p><span class="abc">ABC</span> Company lorem ipsum</p>mailto:joe@abccompany.com保持不变。

所以几乎可以在任何前面有空格或引号的地方替换 ABC,但显然我想让它更通用一点。也许表达式会说它没有在它之前/之后[a-zA-z]

到目前为止我所拥有的:

<script type="text/javascript">
    $(document).ready(function() {
        $('body').find('div').each(function(i, v) {
            h = $(v).html();

            if (h.indexOf('abc') > 0) {
                h = h.replace('abc', '<span class="abc">abc</span>');
                $(v).html(h);
            }
        });
    });
</script>
4

2 回答 2

1

我建议采用不同的方式来保留元素上的数据和事件,并且不会干扰所述元素上的属性。

 $("body div").find("*").addBack().contents().filter(function(){
     return this.nodeType === 3;
 }).each(function() {
     $(this).parent().html(this.nodeValue.replace(/abc/g, '<span  class="abc">abc</span>'));
 })

http://jsfiddle.net/hrEyC/1/

注意,由于使用 , 需要 jQuery 1.9+ .addBack(),对于旧版本替换为.andSelf()

于 2013-05-20T20:59:49.617 回答
1

这不是一件非常有效的事情(循环遍历 DOM 中的所有 div 标签并将正则表达式应用于每个标签),但由于我不知道您有什么限制或您在什么情况下使用此代码,我会只是假设你以这种方式做这个客户端是有充分理由的。

无论如何,这个正则表达式似乎符合您的要求(尽管不是很好定义的要求):

h = h.replace(/([^A-Z])(ABC)([^A-Z])/gi, '$1<span style="color: red">$2</span>$3');

在这里小提琴:http: //jsfiddle.net/czJFG/

于 2013-05-20T21:08:50.567 回答