HTMLDocument の動的な作成 : createDocument メソッド編 ver 2

function createHTMLDocument_createDocument(source) {
  var doc = document.implementation.createDocument(null, 'html', null);
  var range = doc.createRange();
  range.selectNodeContents(doc.documentElement);
  var content = range.createContextualFragment(source);
  doc.documentElement.appendChild(content);
  return doc;
}

http://nanto.asablo.jp/blog/2009/10/29/4660197#htmldoc-createdoc-doctype-ns ではdocument.createRangeを使ってるけど、これは旧AutoPagerizeのコードから少しずつ書き換えていったからであり、この場合ならdoc.createRangeを使えばdocumentへの依存がなくなるはず。

http://twitter.com/nanto_vi/status/8267714063

document.documentElement も doc.documentElement にできるですか?

http://twitter.com/taizooo/status/8269015221

できます。で、adoptNodeもいらなくなります。

http://twitter.com/nanto_vi/status/8271661783

var content = range.createContextualFragment(source); ってことっすか? 全部 doc の下でやるってことかー

http://twitter.com/taizooo/status/8273601237

そういうことです。しかしよく考えたら、これをやるとFirefox 3以下では(docがXML文書なので)HTMLとしてパースできなくなるという欠点が。

http://twitter.com/nanto_vi/statuses/8286489523