2

私のコードは次のとおりです。

<body>
    <p id="tit"></p>
    <script type="text/javascript">
        try {
            document.getElementById('tit').innerHTML = "<div>test</div>";
        }
        catch(e) {
            alert(e)
        }
    </script>
</body>

alert [object Error]IE6/7/8では、なぜですか?

4

3 に答える 3

1

これは(以前は)設計によるものです。

要素には、 HTML仕様<p>のインライン要素のみを含める必要があります。

<!ELEMENT P - O (%inline;)* -- paragraph -->

それほど明確ではないかもしれませんが、それは<p>グループ化要素を含めることができないことを意味します。これで、<div>仕様で次のように読むことができます。

DIV要素とSPAN要素は、id属性とclass属性とともに、ドキュメントに構造を追加するための一般的なメカニズムを提供します。これらの要素は、コンテンツをインライン(SPAN)またはブロックレベル(DIV)として定義しますが、コンテンツに他の表現上のイディオムを課すことはありません。

<p>インライン要素のみを含めることができるのは要素だけではありません。たとえば、ヘッダー(、、... )は同じ動作を共有します<h1><h2>

多くのブラウザでは、不正な形式のHTMLinnerHTMLをプロパティを介して挿入できるため、この奇妙な動作はIEにのみ影響するように見えました。新しいバージョン(現時点ではIE 9)は、スクリプトを介した間違ったHTMLコードの挿入をサポートしているため、HTMLフラグメントによってエラーが発生することはありません(まだ有効なHTMLでない場合でも)。

私の提案は、有効なHTMLのみを挿入する
ことです。コンテナ要素をから<p>に変更できます<div>
-または-
挿入された要素をから<div>に変更できます<span>

于 2012-04-24T12:30:27.493 に答える
0

eオブジェクトです。

alert( e.message);
于 2012-04-24T12:00:12.890 に答える
0

p要素のようですが、divを使用するとうまくいきます:

<div id="tit"></div>
<script type="text/javascript">
    try {
        document.getElementById('tit').innerHTML = "<div>test</div>";
    }
    catch (e) {
        alert(e.message);
    }
</script>

代わりに、p タグを使用しません。非常にうまく機能するため、jQuery とその .append() を使用することもできます。

于 2012-04-24T12:05:58.617 に答える