【问题标题】:How to replace text without replacing the node property [duplicate]如何在不替换节点属性的情况下替换文本[重复]
【发布时间】:2014-05-04 23:34:18
【问题描述】:

假设我有一个 HTML 字符串

var _str = <div>The European languages are members of the same family. <div class="same">Their separate existence is a myth.</div> For science, music, sport, etc, Europe uses the same vocabulary. The languages only differ in their grammar, <div class="same">their pronunciation and their most common words.</div></div>

我想把文字same替换成&lt;span class="highlighted"&gt;same&lt;/span&gt;

我在做_str.replace('same', '&lt;span class="highlighted"&gt;same&lt;/span&gt;'); 所以它也将class="same" 替换为class="&lt;span class="highlighted"&gt;same&lt;/span&gt;"

谁能帮助我如何只替换节点( )内的文本而不是任何内容?

【问题讨论】:

  • 你不能在替换和跨度上的“相同”的任一侧添加一个空格吗? _str.replace(' same ', '&lt;span class="highlighted"&gt; same &lt;/span&gt;');
  • @JamieBarker 如果单词后面跟着标点符号怎么办? "we are the same."
  • 只需在 'same' 前留一个空格 _str.replace('same', ' same');
  • 真的,这是针对 HTML 使用正则表达式的问题。您应该将 _str 解析为 HTML 结构,然后在每个单独的节点处替换单词 same
  • @RGraham 我想这样做,但我怎么知道我要替换的字符串不在任何 HTML 标记中,即。 &lt;same&gt;.

标签: javascript jquery html string replace


【解决方案1】:
_str.replace(/([^"])same([^"])/g, '$1<span class="highlighted">same</span>$2');

如您所述,此解决方案仅限于此特定字符串。如果你只想替换 H​​TML 标签之间的文本,解析 HTML 将是最安全的选择。

【讨论】:

  • 解决方案完美,但同样有局限性。如果我在字符串中搜索class 怎么办。那么结果将是&lt;div &lt;span class="highlighted"&gt;class&lt;/span&gt;="same"&gt;
【解决方案2】:

一个简单的解决方案是在“相同”之前添加一个空格,如下所示:

_str.replace(' same', ' <span class="highlighted">same</span>');

【讨论】:

  • 如果是文本&lt;div&gt;same example&lt;/div&gt;,这将被忽略。不是吗?
  • 是的,它将被忽略。
猜你喜欢
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
  • 2023-03-13
  • 2013-11-24
  • 2015-03-04
  • 2023-03-31
  • 2016-10-14
  • 1970-01-01
相关资源
最近更新 更多