IEで「HTML Parsing Error:Unable to modify the parent container element before the
2504 ワード
エラー: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:ファイルが完全にロードされ、ロードに成功したことを示します.