Javascript 包含HTML实体的文本节点值

Javascript 包含HTML实体的文本节点值,javascript,Javascript,我正在创建一个实时HTML编辑器,该编辑器在呈现DOM后加载,并通过循环所有节点来构建源代码。我注意到,当我尝试读取包含HTML实体的文本节点的nodeValue时,我总是得到该实体的呈现unicode值 如何读取呈现的文本节点并保留HTML实体代码?(使用香草JS) 例如: <div id="test">copyright &copy;</div> <script> var test = document.getElementById('test')

我正在创建一个实时HTML编辑器,该编辑器在呈现DOM后加载,并通过循环所有节点来构建源代码。我注意到,当我尝试读取包含HTML实体的文本节点的nodeValue时,我总是得到该实体的呈现unicode值

如何读取呈现的文本节点并保留HTML实体代码?(使用香草JS)

例如:

<div id="test">copyright &copy;</div>
<script>
var test = document.getElementById('test');
console.log(test.childNodes[0].nodeValue);
// expected: copyright &copy;
// actual: copyright ©
</script>
版权与复制;
var test=document.getElementById('test');
console.log(test.childNodes[0].nodeValue);
//预期:版权和副本;
//实际:版权所有(

很遗憾,您不能。接口继承自,并且两个接口仅作为返回值提供,返回值包含Unicode字符

此外,HTML5解析算法基本上完全删除了实体。本手册的几个章节对此进行了定义

  • 8.2.4.1数据状态:描述了在数据状态下,符号AND将解析器置于字符引用
  • 8.2.4.2数据状态下的字符引用描述了应使用符号后跟与的标记。如果一切正常,它将返回Unicode字符标记,而不是实体
  • 8.2.4.69符号化字符引用描述了如何解释
    &(基本上做一些事情,如果一切正常,)
因此,当解析器完成时,实体已经消失,并被Unicode符号替换。这并不奇怪,因为如果需要,也可以将符号©直接放入HTML代码中

但是,您仍然可以撤消该转换:您需要复制,并检查文档中的任何字符是否包含条目:

var entityTable = {
  169: "&copy;"
}

function reEntity(character){
  var index = character.charCodeAt(0), name;

  if( index < 127) // ignore ASCII symbols
    return character;

  if( entityTable[index] ) {
    name = entityTable[index];
  } else {
    name = "#"+index;
  }
  return "&"+name+";"
}
var entityTable={
169:“&复制;”
}
函数重入性(字符){
var index=character.charCodeAt(0),name;
if(索引<127)//忽略ASCII符号
返回字符;
if(entityTable[索引]){
名称=entityTable[索引];
}否则{
name=“#”+索引;
}
返回“&”+名称+”;“
}

这是一项相当繁琐的任务,但由于解析器的行为,您可能不得不这样做。(别忘了检查是否有人已经这样做了)。

这有点令人失望。我将只使用一个表,并获得一个自动完成。似乎有一些例外,如
:在元素上调用
.innerHTML
时会出现6个字符的字符串。Try:
d=document.createElement('i');d、 innerHTML='';console.log(d.innerHTML)