为什么使用.html()会破坏这个替换表达式?

时间:2015-08-29 23:37:42

标签: javascript jquery html regex

在处理项目时,我遇到了一个错误并发现了这种意外行为:

如果我在字符串上调用.replace()并使用.text()将结果设置为div,则替换函数将按预期工作。

但是,如果我在字符串上调用.replace()并使用.html()将结果设置为div,则不会在字符串中替换目标文本。

这是我的意思的一个例子:

	$('#result1').text('¤cyId'.replace('¤cyId','&currencyId')); // works
	$('#result2').html('¤cyId'.replace('¤cyId','&currencyId')); // doesnt work 

    var result = '¤cyId'.replace('¤cyId','&currencyId')
	$('#result3').text(result); // works
	$('#result4').html(result); // doesnt work 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="result1"></div><br>
<div id="result2"></div><br>
<div id="result3"></div><br>
<div id="result4"></div>

我发现使用.text()代替.html()可以解决问题,但是......

为什么会这样?

3 个答案:

答案 0 :(得分:6)

替换效果很好。

当您使用html方法时,只会看到错误的字符串在元素中结束,因为浏览器会将&curren解码为¤,因此&currencyId是显示为¤cyId

使用text方法时,文字不会被解码为HTML代码,因此.text("&currencyId").html("&amp;currencyId")具有相同的效果。

¤字符的HTML实体为&curren;,但浏览器也接受不带分号的&curren格式。

答案 1 :(得分:1)

因为&amp; curren是一个html实体,而.html会解析html实体,而.text会逐字逐句地删除它们。

答案 2 :(得分:1)

尝试

$('#result2').html('¤cyId'.replace('¤cyId','&amp;currencyId'));

&安培;在html中应该是&amp;