0

奇妙なエラーに遭遇したとき、IE8 と IE9 のエラーのバグ修正を行っています。HTML には<section class="create">タグがありますが、ページが読み込まれた後、ページの少し下にまったく同じタグがあります。最初は、どういうわけか悪いjavascriptの複製があると思っていましたが、sectionjavascriptを無効にしましたが、ページがロードされた後もまだそこにありました。これは、このタグを作成する HTML パーサーでなければなりませんよね? レンダリングされた HTML は、HTML ファイルとまったく一致しません。

</div>HTML パーサーがタグやタグなどが欠落している場合に追加することは知っていますが、何らかの理由で</html>IE が再度開いたり、タグを追加したりすることはありますか? もしそうなら、これは何が原因ですか?そうでない場合、javascript が無効になっているときに、HTML に存在しないタグが DOM に追加される原因は何ですか?

私が取り組んでいる HTML ページの長さは 20,000 行を超えており、不正な形式の HTML がいたるところにあり、そのいずれかが DOM を不適切にレンダリングする原因となっている可能性があります。この質問に追加できるスニペットがあれば、コメントでお知らせください。

この問題を再現する最小限の HTML を次に示します。formタグではなく、タグ内でのみ発生することに注意してくださいdiv。フォーム要素が閉じられた後、sectionタグは IE8 および IE9 で再び開かれるため、2 つsectionの要素が作成されます。

<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <form>
            <section class="create">
                CREATE SECTION
        </form>
    </body>
</html>

そして、ここにフィドルがあります:http://jsfiddle.net/VurE6/

記録として、IE10、Chrome、Firefox、および Safari では、この動作は表示されません (私が知っていることです)。

4

1 に答える 1

3

ある程度、すべてのブラウザーがこの種のことを行います。たとえば、これを試してください

<b>1<i class="create">2</b>3</i>

どのブラウザでも、「create」クラスで作成された 2 つの i 要素が表示されます。

これが発生するタイミングに関するルールは非常に複雑ですが、終了タグが要素の子孫の効果を終了しない場合に発生します。IE9 では、フォームの終了タグはセクションを閉じていないため、セクションを継続するには、ブラウザで 2 番目のセクション要素を作成する必要があります。

これは b 要素と i 要素の場合には一定の意味がありますが、セクションでは意味がないため、IE10 や最新の Firefox や Chrome などの HTML5 解析アルゴリズムを実装するブラウザーでは発生しませんが、どうやら、IE9で。

HTML5 が誤ってネストされた b および i タグの問題を処理する方法については、 http://www.w3.org/html/wg/drafts/html/master/syntax.html#misnested-tags: -bi-/b-/i を参照してください。

于 2013-03-15T00:58:21.113 に答える