如何在下面解决此代码,以在不删除“ / g”的情况下替换“ <3”和“ 3”(不带空格):
$('#seem').each(function() {
$(this).html($(this).html().replace(/\<\3/g,"heart"))
});
$('#seem').each(function() {
$(this).html($(this).html().replace(/\<\/\3/g,"broken-heart"))
});
答案 0 :(得分:0)
在解决文本替换问题之前,还有两个其他问题。
首先在ID选择器上调用each()
是一种代码味道。在DOM中,ID必须是唯一的,因此绝不能有多个。如果是这种情况,请使用一个类。
第二,您可以为html()
或text()
提供一个函数,该函数接受当前值作为参数。这减少了您需要创建的jQuery对象的数量,并使逻辑更加简洁。
接下来,HTML中的<
必须编码为<
,因此,如果要使用html()
,则需要替换为<
明确地。或者,您可以使用经过解码的text()
,并直接使用尖括号。
您的正则表达式也不是很正确,因为<
和3
字符都不需要转义,只需要转义/
。
最后,您可以将呼叫链接到replace()
;您无需复制整个jQuery对象或each()
循环即可替换字符串中的多个值。
话虽如此,请尝试以下操作:
$('.seem').text(function(i, t) {
return t.replace(/<3/g, 'heart').replace(/<\/3/g, 'broken-heart');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="seem">
Achy breaky <3
</div>
<div class="seem">
Owner of a </3
</div>