JQuery替换特殊字符

时间:2012-01-25 21:06:00

标签: jquery html

我正在尝试替换页面加载时内容管理网站上出现转义注册(®)符号的所有实例。基本上,我的问题是这段代码不起作用:

function replaceText() {
    $("*").each(function() { 
        if($(this).children().length==0) { 
            $(this).html($(this).html().replace('&reg;', '<sup>&reg;</sup>')); 
        } 
    });
}

但这样做:

function replaceText() {
    $("*").each(function() { 
        if($(this).children().length==0) { 
            $(this).html($(this).html().replace('test', '<sup>&reg;</sup>')); 
        } 
    });
}

4 个答案:

答案 0 :(得分:3)

将®字符放入javascript正则表达式:

$("*").each(function()
{ 
    if ( ! $(this).children().length )
    { 
        $(this).html(function(el, html)
        {
            return html.replace(/®/g, '<sup>&reg;</sup>'); 
        });
    } 
});

这是小提琴:http://jsfiddle.net/Lh9f6/


PS 正如@ jfriend00所提到的,如果您知道在任何属性中都不会有这个特殊字符(例如在alt中),那么您正在执行此操作< em>在将任何事件绑定到任何元素之前,然后您不必遍历所有事件。你可以在身体上做一次,它应该取代所有它们。

答案 1 :(得分:3)

这似乎有效:

$(document.body).html($(document.body).html().replace(/&reg;|®/g, "<sup>&reg;</sup>"));

这也替换了原始代码没有的给定对象中的多个符号。

仅供参考,您不必单独查看每个元素。您可以查看正文的HTML并替换所有内容,只要您不认为此模式将合法地出现在HTML属性中,并且只要您在附加任何事件处理程序之前执行此操作。

如果您想单独遍历每个元素,可以将此替换逻辑与原始代码一起使用,如下所示:

$("*").each(function() { 
    if($(this).children().length==0) { 
        $(this).html($(this).html().replace(/&reg;|®/g, '<sup>&reg;</sup>')); 
    } 
});

这是一个小提琴:http://jsfiddle.net/jfriend00/DqdwX/

答案 2 :(得分:0)

您应该检查®字符的实例。如果您使用的文本编辑器不允许您内联®,则可以使用JS转义的unicode等效项:

'\u00ae'

正则表达式会对此有所帮助:

...replace(/\u00ae|&reg;/g, ...);

答案 3 :(得分:0)

该字符可能是HTML源代码中的字面值。然后转义符号&reg;不匹配。使用此:

...replace(new RegExp('(&reg;|\u00AE)', 'g'), '<sup>$1</sup>');

\u00AE是Unicode代码点U + 00AE的又名Javascript转义表示法。