javascript - 为什么使用 .html() 会破坏这个 Replace 表达式?
在做一个项目时,我遇到了一个错误,并发现了这种意外的行为:
如果我在字符串上调用 .replace() 并使用 .text() 将结果设置到 div 上,replace 函数的效果会如我预期。
然而,如果我在一个字符串上调用 .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() 可以解决这个问题,但是...
这为什么会发生?
答案#1
替换工作得很好。
当使用 html 方法时,看起来错误的字符串出现在元素中只是因为 ¤ 被浏览器解码为 ¤,所以 ¤cyId 显示为 ¤cyId。
当你使用 text 方法时,文本不会被解码为 HTML 代码,因此 .text("¤cyId") 的效果与 .html("&currencyId") 相同。
字符 ¤ 的 HTML 实体是 ¤,但浏览器也接受不带分号的形式 ¤。
答案#2
因为 ¤ 是一个 HTML 实体,而 .html 会解析 HTML 实体,而 .text 会保持原样。