RangeのcreateContextualFragment()で消される可能性のあるノード

  • 文書型宣言
  • 処理命令
  • マーク区間
  • html
  • head
  • title
  • meta
  • link
  • body
  • ...
var str = "<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01//EN'><html>"+
   "<head><meta content=''><link><title>a</title></head>"+
   "<body><?test ?><p><![CDATA[ a ]]></p></body>"+
   "</html>";
var range = document.createRange();

//document直下を選択中の場合
//Firefox 3 beta 3ではcreateContextualFragment()でエラーになる
//Safari 3.0.4 betaではcreateContextualFragment()で落ちる
range.setStartAfter(document.body);
var f = range.createContextualFragment(str);
alert(new XMLSerializer().serializeToString(f));
Firefox 3 beta 3
<META content=""/><LINK/><TITLE>a</TITLE><P><!--[CDATA[ a ]]--></P>
Opera 9.50 beta 1
<meta content=""/><link/><title>a</title><?test ?><p><![CDATA[ a ]]></p>
Safari 3 beta (3.0.4)
<p></p>
  • innerHTML