htsign's blog

ノンジャンルで書くつもりだけど技術系が多いんじゃないかと思います

DOMParser と XMLSerializer

DOMParserは覚えてるけどXMLSerializerをしょっちゅう忘れちゃうのでメモ。

var parser, serializer;
var input, output;
var dom;

input = '<div id="test"><p>hogehoge</p></div>';

parser = new DOMParser();
try {
  dom = parser.parseFromString(input, "text/html").getElementById("test");
}catch(e){
  dom = parser.parseFromString(input, "application/xml").documentElement;
}

document.body.appendChild(document.adoptNode(dom));

serializer = new XMLSerializer();
output = serializer.serializeToString(document.getElementById("test"));

input === output; //==> true // IEやFxはxmlns属性が付いてfalseが返ることが稀によくある


XMLSerializerはDOM標準ではないっぽいけどinnerHTMLよりはマシでしょ…。
速度的には、innerHTMLを参照するのに比べてseliarizeToStringを使うと3〜10倍くらい*1高速化します。

*1:ブラウザによる