IEで「HTML Parsing Error:Unable to modify the parent container element before the



エラー:IEで「HTML Parsing Error:Unable to modify the parent container element before the child element is closed」
 
 
現象:同僚の間でいくつかのIEテストの情況の下で、あるものはこの間違いを報告して、あるものは報告しません.資料を調べた後、以下の原因をまとめることができる.
       1. 閉じていないhtmlラベルがあります.たとえば、であり、
ではありません.
       2. ページがロードされない前にjsコードがbodyの要素を操作し、関連jsコードをの後ろに移動します.
 
私がここにいる理由は、DOMツリーのロードが完了する前に、いくつかのDOM操作が行われたためです.appendChildがあります.
<html>
<head>
</head>
<body>
<div>
<script type="text/javascript">
    alert(document.readyState);
    var oDiv = document.createElement("DIV");
    oDiv.innerHTML = 'test odiv test odiv';
    document.body.appendChild(oDiv);
</script>
</div>
</body>
</html>
 
---------------------------------------------------------------------------------------------------------------------------------
DIVを解析するとBODY上でappendChildが開始され、このときBODYはまだ完全に準備されておらず(It is not fully loaded)、ドキュメント構造はloadingとinteractive状態の間にあり、上記のエラーが発生する
 
 
解決策:
この問題を解決するにはdocumentを行うことができる.readyState状態判断はcompleteの場合に行う
 
if (document.readyState=="complete")
{

        createDiv ();

}
else
{
      document.onreadystatechange = function(){

                if (document.readyState == "complete")
                {
                        createDiv ();
                }

        }

}

function createDiv()
{
    var oDiv = document.createElement("DIV");
    oDiv.innerHTML = 'test odiv test odiv';
    document.body.appendChild(oDiv);

}
 
onreadystatechange :
 
readyStateプロパティが変更されるたびに呼び出される関数(または関数名)が格納されます.
 
readyState:
XMLHttpRequestのステータスが保存されています.0から4まで変化します.
0:要求未初期化1:サーバ接続が確立された2:要求受信3:要求処理中4:要求が完了し、応答が完了しました.
 
0-UNNITIALIZED:XMLオブジェクトが生成されますが、ロードされたファイルはありません.1-LOADING:プログラムをロード中ですが、ファイルの解析はまだ開始されていません.2-LOADED:一部のファイルはロードされ解析されていますが、オブジェクトモデルはまだ有効ではありません.3-INTERACTIVE:ロードされたファイルの一部のみ有効です.この場合、オブジェクトモデルは有効ですが読み取り専用です.4-COMPLETED:ファイルが完全にロードされ、ロードに成功したことを示します.