在处理项目时,我遇到了一个错误并发现了这种意外行为:
如果我在字符串上调用.replace()
并使用.text()
将结果设置为div,则替换函数将按预期工作。
但是,如果我在字符串上调用.replace()
并使用.html()
将结果设置为div,则不会在字符串中替换目标文本。
这是我的意思的一个例子:
$('#result1').text('¤cyId'.replace('¤cyId','¤cyId')); // works
$('#result2').html('¤cyId'.replace('¤cyId','¤cyId')); // doesnt work
var result = '¤cyId'.replace('¤cyId','¤cyId')
$('#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()
可以解决问题,但是......
为什么会这样?
答案 0 :(得分:6)
替换效果很好。
当您使用html
方法时,只会看到错误的字符串在元素中结束,因为浏览器会将¤
解码为¤
,因此¤cyId
是显示为¤cyId
。
使用text
方法时,文字不会被解码为HTML代码,因此.text("¤cyId")
与.html("&currencyId")
具有相同的效果。
¤
字符的HTML实体为¤
,但浏览器也接受不带分号的¤
格式。
答案 1 :(得分:1)
因为&amp; curren是一个html实体,而.html会解析html实体,而.text会逐字逐句地删除它们。
答案 2 :(得分:1)
尝试
$('#result2').html('¤cyId'.replace('¤cyId','&currencyId'));
&安培;在html中应该是&