XMLSerializer
パイルに追加します。オブジェクトキャッシュを使用せずに(シリアライザ上でもテキストノード上でも)最速の結果を提供します。
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の方が高速かもしれませんが、私の(制限された)テストでinnerHTML
は、a が最速です。
最速の1行:
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