Javascript 包含HTML实体的文本节点值
我正在创建一个实时HTML编辑器,该编辑器在呈现DOM后加载,并通过循环所有节点来构建源代码。我注意到,当我尝试读取包含HTML实体的文本节点的nodeValue时,我总是得到该实体的呈现unicode值 如何读取呈现的文本节点并保留HTML实体代码?(使用香草JS) 例如:Javascript 包含HTML实体的文本节点值,javascript,Javascript,我正在创建一个实时HTML编辑器,该编辑器在呈现DOM后加载,并通过循环所有节点来构建源代码。我注意到,当我尝试读取包含HTML实体的文本节点的nodeValue时,我总是得到该实体的呈现unicode值 如何读取呈现的文本节点并保留HTML实体代码?(使用香草JS) 例如: <div id="test">copyright ©</div> <script> var test = document.getElementById('test')
<div id="test">copyright ©</div>
<script>
var test = document.getElementById('test');
console.log(test.childNodes[0].nodeValue);
// expected: copyright ©
// 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符号化字符引用描述了如何解释
&代码>(基本上做一些事情,如果一切正常,)
var entityTable = {
169: "©"
}
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)