XMLSerializer で選択範囲の DOM ツリーを文字列化
DocumentFragment (以下 df)内のノードの文字列を取得したいとき、df には innerHTML がないので
今までは適当な要素を作ってそれに df を appendChild してから innerHTML で取得していたけど、
Parsing and serializing XML - MDC
を読んで「DOM ツリーを文字列にシリアライズする」というやつがあったので試してみた。
var sl = window.getSelection();//Selection オブジェクト var ra = sl.getRangeAt(0);//Range オブジェクト var df = ra.cloneContents();//df オブジェクト var xs = new XMLSerializer();//XMLSerializer オブジェクトを生成 var str = xs.serializeToString(df);//df 内のノードの文字列を取得 console.log(str);//結果。選択範囲の DOM の文字列 //一行にするとこうなる。長い。 (new XMLSerializer).serializeToString(window.getSelection().getRangeAt(0).cloneContents());
document.body とか通常の要素に serializeToString を使用すると
outerHTML 相当の(つまり body 要素も入った)文字列が返ってきた。
歌劇にも XMLSerializer あった。
いちおうアップ。