web-dev-qa-db-ja.com

jQuery「を除くすべてを選択」

テーブルの最初の行を選択しようとしています。注:最初の行はtheadタグでラップされているため、次のようになります。

_<table>
  <thead>
    <tr>  <!-- first row --> </tr>
  </thead>
  <tbody>
    <tr>  <!-- body --> </tr>
  </tbody>
  <tfoot>
    <tr>  <!-- body --> </tr>
  </tfoot>
</table> 
_

'select first row' ヒントは、ラッパータグがない場合に機能する可能性があります。これは私が試したものですが、機能しません:

_ $("*:not(thead)", tableSelector).remove();
_

つまり、「not tfoot」セレクターを使用して、tbodyセレクターとtfootセレクターの両方を削除したいと思います。 _<thead>_とeverything-inside-theadを除いて、テーブルから他のすべてを削除したいからです。つまり、基本的に私がやろうとしているのは、ヘッダーとその中身を除くすべてを選択することです。直感的には:not(thead *)のようなものは機能しますが、機能しません。

私の回避策は$("tbody, tfoot", tableSelector).remove();ですが、反対の(セレクターではない)使用方法を学び、理解したいと思います。

16
Martin

あなたの質問は正確には明確ではありません。単一のテーブルの最初の行を選択するには:

$("table tr:first")...

またはその逆:

$("table tr:not(:first)")...

それは実行されますが、テーブルが複数ある場合は機能しなくなります(テーブルが3つある場合でも、1つの行のみが選択されます)。あなたはそれを回避することができます:

$("table").each(function() {
  $(this).find("tr:first")...
});

次の方法で、THEADにないすべての行を取得できます。

$("table > :not(thead) > tr")...

編集:あなたはこれを複雑にしすぎていると思います。 THEADとその内容以外のすべてを削除したい場合、それは比較的簡単です。

$("table > :not(thead)").remove();

TBODY要素とTFOOT要素をそのままにしておきたい場合は、次のように変更します。

$("table > :not(thead) > tr").remove();
20
cletus

テーブルセレクタで children() を使用すると、直接の子のみが選択されます。 notセレクターを使用してこれをフィルタリングできます。

$(tableSelector).children(':not(thead)').remove();
1
tvanfosson

テーブルの最初の行を選択しようとしています。

古き良きDOMを使ってみませんか?

mytable.rows[0]
1
bobince

「:not」疑似セレクターは、パラメーターとして別のセレクターを受け取るため、これ以外のすべてを実際に削除できます。

$(':not(thead, thead *)', 'table').remove();

あなたは ここで実際にそれを見る することができます。

これは、 コメント で書いたものと非常に似ていますが、コンテキストを使用せず(テーブルノードを削除)、子オペランドを使用し、その中に「すべて」が含まれていなかった点が異なります。 theadですが、代わりに直接の子のみが含まれています。子オペランド ">"を削除すると、直接の子だけでなく、ノードのすべての子孫が除外されます。

0
jacmkno

table以外のtheadを削除する場合は、次のセレクターを試してください。

table > *:not(thead)

編集すでに変数にテーブルがあることを指摘したので:

$("> *:not(thead)", context)
0
Gumbo