3

たとえば、次のような最小限のhtmlタグを含む非常に単純なテーブルがあります。

<table id="test">
    <tr><td>some table cell</td></tr>
</table>

タグが存在するかどうかを確認しようとしています。奇妙なことに、jquery は、定義していないにもかかわらず、「はい、tbody タグがあります」と言います。ここで何が起きてるの?

$('table#test').each(function(){

    var tbody = $(this).find('tbody');

    //how can there be a tbody when there is no <tbody> tag defined?
    console.log(tbody.length); //gives 1, should be 0 though as there is no tbody

});

jQuery 1.6.4を使用してChrome 28.0、Firefox 22.0でテスト済み(現在のプロジェクトでは必要ですが、jQuery 2.0.2でも発生します)

ここにも jsFiddle があります: http://jsfiddle.net/nerdess/rH5Lf/

4

4 に答える 4

7

tbody はテーブルに自動的に追加されます。右クリックしてコンポーネント (chrome 開発者ツール) を表示すると、tbody がそこにあることがわかります。

<table id="test">
    <tbody>
        <tr>
            <td>some table cell</td>
        </tr>
    </tbody>
</table>
于 2013-08-13T12:59:44.450 に答える
3

このtbody要素はドキュメントが有効であるために必要です。したがって、ほとんどのブラウザでは、要素が欠落している場合に追加されます。Firebug または Chrome 開発ツールを使用してドキュメントを検査すると、レンダリングされたソースに表示されます。

達成しようとしていることについてより詳細に質問を編集できる場合は、別の方法を提案できます。

于 2013-08-13T13:01:16.427 に答える
1

tbody要素は、行グループの範囲を識別します。テーブルに tbody 要素が存在しない場合、tr要素のコレクションは単一のグループとして扱われるためtbody、jquery の Dom 要素表現で単一の要素の下にラップされます。tbodyこれが、カウントが 1と表示される理由です。

于 2013-08-13T13:10:13.217 に答える
1

標準は次のように述べています。

TABLE に TR 要素を直接含めることは実際には許可されていません。TR 要素は、THEAD、TFOOT、または TBODY に含める必要があります。ただし、簡略化と下位互換性のために、「テーブルにテーブル本体が 1 つだけ含まれ、テーブルのヘッドまたはフッター セクションがない場合」は、TBODY の開始タグを省略できます。この場合、要素はブラウザによって推測されます。

ここをチェックすると、tbody が何らかの形で必要であることがわかります: http://www.w3.org/TR/html4/sgml/dtd.html

(CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)>
于 2013-08-13T13:10:41.327 に答える