【问题标题】:Wrap specific word in a heading with a span without losing html formatting在不丢失 html 格式的情况下,用 span 将特定单词包装在标题中
【发布时间】:2018-04-26 14:53:38
【问题描述】:

我正在尝试使用以下方法将 fubar 的所有实例包含在具有跨度的任何标题中:

jQuery('h1, h2, h3, h4, h5, h6').each(function(){
        var located = jQuery(this).text().replace(/fubar/g,"<span class='myspan'>fubar</span>");
        jQuery(this).html(located);
    });

如果文本直接在 H 标记内,这可以正常工作,例如

<h1>this is fubar</h1>

但是,如果文本包含在 a 标记内,则 a 标记将被去除,例如

<h1><a href="#">this is fubar</a></h1>

变成:

<h1>this is <span class="myclass">fubar</span></h1>

如何保留a 标签和/或其他包装元素?


编辑

有时,'fubar' 也可能在 href 属性中。这显然不应该被替换。例如

<h1><a href="#/this-is-fubar">this is fubar</a></h1>

【问题讨论】:

  • 你不能用.html()代替.text()吗?
  • @Huangism 有时 'fubar' 也可能在 a href 属性中。
  • 我确信有一种方法可以使用 js 抓取标签之间的所有内容

标签: javascript jquery html


【解决方案1】:

使用html()获取元素的内部HTML并替换其中的出现:

$('h1, h2, h3, h4, h5, h6').each(function() {
  var located = $(this).html().replace(/fubar/g, "<span class='myspan'>fubar</span>");
  $(this).html(located);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<h1><a href="#">this is fubar</a></h1>

【讨论】:

  • 谢谢!有没有办法防止 href 属性中的 'fubar' 也被替换?例如

    this is fubar

    'fubar' 的两个实例都被替换(文本和 href 属性)。
【解决方案2】:

一种选择是find:contains(fubar) 的所有孩子,然后循环并更改文本。

jQuery('h1, h2, h3, h4, h5, h6').each(function() {
    jQuery(this).find(':contains(fubar)').each(function(){
        var located = $(this).text().replace(/fubar/g, "<span class='myspan'>fubar</span>");
        $(this).html(located)
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h1><a href="#">this is fubar</a></h1>

【讨论】:

  • 谢谢!有没有办法防止 href 属性中的 'fubar' 也被替换?例如

    this is fubar

    'fubar' 的两个实例都被替换(文本和 href 属性)
  • 乐于助人:)
猜你喜欢
  • 1970-01-01
  • 2011-01-14
  • 2016-08-24
  • 1970-01-01
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多