1

我有一个经常使用注册商标符号“®”的网站。此符号以与周围文本相同的大小呈现。因为我需要它显示更小和上标,所以我使用 jQuery 在页面上查找“®”的所有实例并将其替换为“ <span class="reg-mark">®</span>”。这样我就可以设置该角色的显示样式。

我正在使用以下代码进行搜索和替换:

<script type="text/javascript" charset="utf-8">
    $(document).ready(function() {
        var strNewString = $('body').html().replace(/®/g,'<span class=\"reg-mark\">®</span>');
        $('body').html(strNewString);
    });
</script>

这成功地替换了“®”的所有实例,以便我可以按照我想要的方式设置它们的样式。

但是,它还替换了标签的“alt”属性中的“®”实例,这会破坏图像的显示。

有没有办法可以在跳过属性值的同时完成此搜索和替换?

谢谢,PJ

4

4 回答 4

4
$('div, p, a, h1, h2, h3').filter(":contains('®')").each(function(){
    $(this).html($(this).html().replace('®', '<span class="reg-mark">®</span>'));
});

演示

于 2012-05-04T20:20:09.690 回答
1

我会选择一个要求 ® 在尖括号之间的正则表达式

例如: /(>[^<] )®([^<] <)/

然后你可以将第 1 部分、新插入和第 3 部分连接到新匹配。

然而,这仅匹配出现在 HTML 括号之间的事件。如果您想匹配任何类型的属性中的文本,这将不起作用。

于 2012-05-04T20:25:51.003 回答
0

使用 JQuery 而非选择器。例如,只需将其“不”放在<img>标签上即可。 http://api.jquery.com/not-selector/

<script type="text/javascript" charset="utf-8">
    $(document).ready(function() {
        var strNewString = $('body:not(img)').html().replace(/®/g,'<span class=\"reg-mark\">®</span>');
        $('body').html(strNewString);
    });
</script>
于 2012-05-04T20:12:35.917 回答
0
<script type="text/javascript" charset="utf-8">
    $(document).ready(function() {
        var strNewString = $('body:not(img)').html().replace(/®/g,'<span class=\"reg-mark\">®</span>');
        $('body').html(strNewString);
    });
</script>

我认为那会做到的。它应该在 BODY 中找到所有“@”,但在 IMG 标记中跳过任何。还有一些选择器可以让您专注于 ALT 标签。例如:

$('img[alt="@"]')
于 2012-05-06T02:47:43.460 回答