2

私はこのセレクターを持っています:

$("table.details tbody tr:not(.details)")

しかし、なぜこの内部テーブルも選択されるのか疑問に思っています:

<table class="items details">
    <thead>
        <tr>
            <th style="width: 90%;">Test application</th>
            <th style="width: 10%;">Sent to test</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>6456</td>
            <td>8/29/2009</td>
        </tr>
        <tr class="details">
            <td colspan="2">
                <table>
                    <tr>
                        <td style="width: 100px;">Description:</td>
                        <td>2312313</td>
                    </tr>
                    <tr>
                        <td colspan="2"></td>
                    </tr>
                    <tr>
                        <td>Test URL Test</td>
                        <td><a href="Test2" title="Visit test application">Test2</a></td>
                    </tr>     
                </table>
            </td>
        </tr>
    </tbody>
</table>

.length プロパティは、合計の数である 6 を返します。

しかし、なぜ?

4

4 に答える 4

4

あなたのセレクターはすべての子孫を選択しています。直接の子を選択するには、次を使用します。

$("table.details > tbody > tr:not(.details)")

jQuery ドキュメントのこのセクションがさらに役立ちます: http://docs.jquery.com/Selectors

于 2009-09-03T07:24:47.753 に答える
2

セレクターはサブテーブルの<tr>s と一致します。子孫ではなく直接の子を選択するように変更する必要があります。

$("table.details > tbody > tr:not(.details)")

aが,または内に<tbody>ある場合、要素は暗示されるため、最初の の直接の子孫である sも必要です。<tr><tbody><thead><tfoot><tr><tbody>

于 2009-09-03T07:28:48.210 に答える
0

セレクター基準に一致する行が他にもあるためです。選択したくない場合は、すべての内部テーブル行に詳細クラスを設定する必要があります。

これはあなたが望むものに近いはずです:

$("table.details tbody tr:first");
于 2009-09-03T07:27:41.613 に答える