【问题标题】:How to replace the same character multiple times?如何多次替换同一个字符?
【发布时间】:2014-05-15 20:52:43
【问题描述】:

我需要为类与 jQuery 相同的所有元素替换特定字符。考虑这个 html 代码:

<div class="product-name">
   <h1>Apple®</h1>
</div>

<div class="product-name">
   <h2>iPhone®</h2>
</div>

<div class="product-name">
   <h3>iPhone 5S®</h3>
</div>

我需要将所有 ® 字符替换为上标标签:

$('.product-name').html(
  $('.product-name').html().replace(/®/gi, '<sup>&reg;</sup>')
);

但是,此代码将仅替换第一次出现。对于第二次及以后出现的情况,它会将整个产品名称替换为第一个产品名称,包括 h1 标签。

如何在不更改其他字符和标签的情况下仅替换 ® 字符?

【问题讨论】:

    标签: javascript jquery replace


    【解决方案1】:

    您可以使用callback in html() 将值返回给集合中的每个元素

    $('.product-name').html(function(_, html) {
         return html.replace(/®/gi, '<sup>&reg;</sup>')
    });
    

    FIDDLE

    【讨论】:

    • +1 用于使用g 替换所有。很确定i 选项在这个选项上是多余的:)
    • (具有讽刺意味的是,使用回调可以消除当前输入的问题,即使没有g ..)
    • @user2864740 - 是的,如果每个元素中只有一个字符,则根本不需要正则表达式。
    【解决方案2】:

    试试 $('.product-name').html().split("®").join('&lt;sup&gt;&amp;reg;&lt;/sup&gt;');

    如需更完整的答案,

    var body = $("body").html().split('®').join('<sup>&reg;</sup>');
    $("body").html(body);
    

    JS Fiddle

    【讨论】:

    • +1:巧妙地使用拆分/连接。看看速度与正则表达式方法相比如何。
    • 这个方法需要在.each()
    • 是的,它需要在each 中(并且实际上将结果存储在元素 html 中),但这似乎只是问题的内部部分。 @Christopher Bales:你可能想完成这个答案。
    • 我真的不明白这如何解决任何问题,它与问题完全相同,只是它使用拆分和连接而不是正则表达式,但html() 仍然获取第一个元素的 html仅在集合中,所以它会有完全相同的问题,假设有人将它插入到同一个外部html(),就目前而言它什么都不做?
    • 已添加说明。如果“®”在标签中多次出现,这实际上会替换它们中的每一个。
    猜你喜欢
    • 2011-07-01
    • 2016-11-05
    • 2020-01-16
    • 2016-12-03
    • 2011-12-01
    • 2013-12-05
    • 2021-11-25
    相关资源
    最近更新 更多