尝试使用innerHTML理解这种JavaScript行为

时间:2017-09-13 15:04:38

标签: javascript html

我尝试使用innerHTML设置小于号码和小于或等于的符号,然后将编码后的文本取出,而不是解码后的符号。

这适用于<,但不适用于≤。这有什么原因吗?

var lt = '<';
var le = '≤';

var div_lt = document.createElement('div');
div_lt.setAttribute('original_value', lt);
div_lt.innerHTML = lt;

var div_le = document.createElement('div');
div_le.setAttribute('original_value', le);
div_le.innerHTML = le;

console.log([div_lt.innerHTML, div_lt.innerText, div_lt.getAttribute('original_value')]);
// gives [ "&lt;", "<", "&lt;" ], as I expected
console.log([div_le.innerHTML, div_le.innerText, div_le.getAttribute('original_value')]);
// gives [ "≤", "≤", "&le;" ], but the first value should be "&le;"

JSFiddle:https://jsfiddle.net/54m6c8sk/

2 个答案:

答案 0 :(得分:2)

在HTML中<表示“标记开始”,表示“≤”。

如果您想在HTML中表达<,那么您经常必须使用实体。如果您想表达永远不会使用实体。

通过innerHTML将DOM转换为HTML不会将转换为&le;,因为它永远不会有用。

答案 1 :(得分:-2)

这是一个有趣的...但已经回答:How do I prevent HTML encoding of '&' characters while copying content from a div to the title of the page?

tldr:使用textContent而不是innerHTML - innerHTML实际上不是DOM规范的一部分