我正在尝试替换页面加载时内容管理网站上出现转义注册(®)符号的所有实例。基本上,我的问题是这段代码不起作用:
function replaceText() {
$("*").each(function() {
if($(this).children().length==0) {
$(this).html($(this).html().replace('®', '<sup>®</sup>'));
}
});
}
但这样做:
function replaceText() {
$("*").each(function() {
if($(this).children().length==0) {
$(this).html($(this).html().replace('test', '<sup>®</sup>'));
}
});
}
答案 0 :(得分:3)
将®字符放入javascript正则表达式:
$("*").each(function()
{
if ( ! $(this).children().length )
{
$(this).html(function(el, html)
{
return html.replace(/®/g, '<sup>®</sup>');
});
}
});
这是小提琴:http://jsfiddle.net/Lh9f6/
PS 正如@ jfriend00所提到的,如果您知道在任何属性中都不会有这个特殊字符(例如在alt
中),那么您正在执行此操作< em>在将任何事件绑定到任何元素之前,然后您不必遍历所有事件。你可以在身体上做一次,它应该取代所有它们。
答案 1 :(得分:3)
这似乎有效:
$(document.body).html($(document.body).html().replace(/®|®/g, "<sup>®</sup>"));
这也替换了原始代码没有的给定对象中的多个符号。
仅供参考,您不必单独查看每个元素。您可以查看正文的HTML并替换所有内容,只要您不认为此模式将合法地出现在HTML属性中,并且只要您在附加任何事件处理程序之前执行此操作。
如果您想单独遍历每个元素,可以将此替换逻辑与原始代码一起使用,如下所示:
$("*").each(function() {
if($(this).children().length==0) {
$(this).html($(this).html().replace(/®|®/g, '<sup>®</sup>'));
}
});
答案 2 :(得分:0)
您应该检查®字符的实例。如果您使用的文本编辑器不允许您内联®
,则可以使用JS转义的unicode等效项:
'\u00ae'
正则表达式会对此有所帮助:
...replace(/\u00ae|®/g, ...);
答案 3 :(得分:0)
该字符可能是HTML源代码中的字面值。然后转义符号®
不匹配。使用此:
...replace(new RegExp('(®|\u00AE)', 'g'), '<sup>$1</sup>');
\u00AE
是Unicode代码点U + 00AE的又名Javascript转义表示法。