7

次のソース コードは、次の結果を警告します。

Internet Explorer 7 : 29
Firefox 3.0.3 : 37 (正)
Safari 3.0.4 (523.12.9) : 38
Google Chrome 0.3.154.9 : 38

次の事実は無視してください。

  • Webkit (Safari/Chrome) ブラウザーは、body タグの末尾に追加のテキスト ノードを挿入します。
  • Internet Explorer では、本来あるべきように、空白ノードに改行がありません。
  • Internet Explorer には先頭の空白ノードがありません (<form> タグの前に明らかな空白がありますが、一致するテキスト ノードはありません)。

テスト ページのタグのうち、次のタグは DOM の後に空白テキスト ノードが挿入されていません: forminput[@radio]divspantable、。ula

私の質問は、これらのノードが Internet Explorer で例外になる理由は何ですか? これらのノードの後に​​空白が挿入されず、他のノードに挿入されるのはなぜですか?

この動作は、タグの順序を切り替え、doctype を XHTML に切り替えた場合と同じです (標準モードを維持しながら)。

背景情報を少し提供するリンクを次に示しますが、理想的な解決策はありません。この問題の解決策はないかもしれませんが、私はその動作に興味があります。

ありがとうインターネット、ザック

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script type="text/javascript">
        function countNodes()
        {
            alert(document.getElementsByTagName('body')[0].childNodes.length);
        }
        </script>
    </head>
    <body onload="countNodes()">
        <form></form>
        <input type="submit"/>
        <input type="reset"/>
        <input type="button"/>
        <input type="text"/>
        <input type="password"/>
        <input type="file"/>
        <input type="hidden"/>
        <input type="checkbox"/>
        <input type="radio"/>
        <button></button>
        <select></select>
        <textarea></textarea>
        <div></div>
        <span></span>
        <table></table>
        <ul></ul>
        <a></a>
    </body>
</html>
4

5 に答える 5

10

IE は役立つように努め、空白のみを含むテキスト ノードを非表示にします。

以下では:

<p>
<input>
</p>

W3C DOM 仕様では、<p>3 つの子ノード ("\n"<input>および "\n") があると記述されていますが、IE は 1 つしかないふりをします。

解決策は、すべてのブラウザーでテキスト ノードをスキップすることです。

var node = element.firstChild;
while(node && node.nodeType == 3) node = node.nextSibling;

人気のある JS フレームワークには、このような機能があります。

于 2008-11-22T23:51:38.543 に答える
0

テーブルタグはブラウザによって違うと思います。

たとえば、デフォルトのテーブルに自動的に含まれるノードはどれですか?

<table>
  <thead>
  </thead>
  <tbody>
  </tbody>
  <tfoot>
  </tfoot>
</table>
于 2008-11-11T17:38:36.200 に答える
0

えーと…その理由はIEだと思います。プログラマーがそうするという特別な意図を持っていたとは思いません。

于 2008-11-11T17:04:54.723 に答える
0

DOMを調べて、各ブラウザがドキュメントに含まれていると見なすものを確認してみませんか?

IEはDOMの多くの「最適化」を行います。これがどのように見えるかを印象付けるには、IEで「すべて選択」、「コピー」、次にVisual Studioで「代替を貼り付け」とすると、次のようになります。

<INPUT value="Submit Query" type=submit> 
<INPUT value=Reset type=reset> 
<INPUT type=button> 
<INPUT type=text> 
<INPUT value="" type=password> 
<INPUT type=file> 
<INPUT type=hidden>
<INPUT type=checkbox>
<INPUT type=radio>
<BUTTON type=submit></BUTTON> 
<SELECT></SELECT>
<TEXTAREA></TEXTAREA> 

そのため、空のタグの一部を削除し、いくつかのデフォルト属性を追加します。

于 2008-11-14T02:30:50.270 に答える