我会补充XMLSerializer
。它提供了最快的结果,而无需使用任何对象缓存(不在序列化器上,也没有在Text节点上)。
function serializeTextNode(text) {
return new XMLSerializer().serializeToString(document.createTextNode(text));
}
额外的好处是它支持与文本节点不同的序列化属性:
function serializeAttributeValue(value) {
const attr = document.createAttribute('a');
attr.value = value;
return new XMLSerializer().serializeToString(attr);
}
您可以通过检查规范(文本节点和属性值)来查看其实际替换的内容。完整的文档具有更多的节点类型,但是概念是相同的。
至于性能,如果不缓存,它是最快的。当您确实允许缓存时,innerHTML
以子Text节点调用HTMLElement最快。正则表达式将是最慢的(如其他评论所证明)。当然,XMLSerializer在其他浏览器上可能会更快,但是在我的(有限的)测试中,a innerHTML
是最快的。
最快的单行:
new XMLSerializer().serializeToString(document.createTextNode(text));
最快的缓存:
const cachedElementParent = document.createElement('div');
const cachedChildTextNode = document.createTextNode('');
cachedElementParent.appendChild(cachedChildTextNode);
function serializeTextNode(text) {
cachedChildTextNode.nodeValue = text;
return cachedElementParent.innerHTML;
}
https://jsperf.com/htmlentityencode/1