如何在不删除“/ 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"))
});
在解决文本替换问题之前还有其他一些问题。
首先在id选择器上调用each()
是一种代码气味。 Ids需要在DOM中是唯一的,因此永远不应该有多个。如果是这种情况,请使用课程。
其次,你可以为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>