2009-12-13 13 views
16

テーブルの最初の行を選択しようとしています。注:最初の行はtheadタグに包まれているので、:それはラッパー・タグのためではなかった場合jQuery "以外のすべてを選択"

<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(); 

つまり、私はセレクタを「TFOOTない」を使用してTBODYとTFOOTセレクタの両方をオフに取り除くしたいと思います。私は<thead>とすべてのことを除いてテーブルからすべてを削除したいから - theadad。ですから、基本的には、あなた以外のすべてのものを選択し、その中に何があるのか​​を選択することです。暗黙のうちに:not(thead *)のように働くことができますが、そうではありません。

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

+0

。あなたは言い換えることができますか? – cletus

+0

'' tbody、tfoot "'がここで一番いいようです。実際、私はあなたの質問を完全に読むまでそれを提案しようとしていました。ポイント: ':not(thead)'も 'tr'を選択して削除したので失敗しました。 – Kobi

+0

「ザードとその子供たち」のようなセレクタはないので、私は言うことができます。 – Martin

答えて

20

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

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

またはリバース:

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

はそれを行いますが、それは一つのテーブルよりも多くがあるかどう壊れます(それが唯一の場合でも、1行を選択します3つのテーブルがあります)。

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

あなたがしてTHEADのすべての行をない得ることができます:あなたがしていることを回避することができます

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

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

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

あなたの場所にTBODYとTFOOT要素を残しておきたい場合にそれを変更します。

children()を使用して
$("table > :not(thead) > tr").remove(); 
+1

わかりました。最初の行をTHE THEAD THEAD THE TOADを選択します。 「」とその中のすべてのものを除いて、テーブルからすべてを削除したいからです。 – Martin

+0

+1の "あなたの質問は明確ではありません" ;-) – Frunsi

+0

+1すべての可能性をカバーします。 :-) – Nagri

1

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

$(tableSelector).children(':not(thead)').remove(); 
+0

これは実際にセレクタのみのソリューションを使用するよりも約30倍遅くなります。 – vrutberg

+0

それを説明する気に?私の簡単なテストでは、あなたのソリューションは1000回の反復で平均400msを要し、同じ1000回の反復では300ms以上の時間がかかります。 – tvanfosson

+0

...私のテストでは、明白な理由で削除するのではなく、hide/showを行っていたことに注意してください。 – tvanfosson

1

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

なぜ古いDOMを使用しないのですか?あなたがthead以外の任意のchild oftableを削除したい場合は

mytable.rows[0] 
+0

私はTHEADが来るようにしたいので、普通の行はそれをカットしません。 – Martin

+0

さらに、テーブルから他のものをすべて削除したいので、行を選択するだけでどこにでもいられません。 – Martin

0

、このセレクタを試してみてください。

table > *:not(thead) 

編集あなたはすでに変数にテーブルを持っていることを指摘しているので:

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

もう一度、conetxt指定子を使いたいと思います。 $(xx、context) – Martin

+0

いいえ..これはうまくいきません。それはすべてを削除します。これまでは "tbody、tfoot"しか動作していないようです。 – Martin

+0

@マーティン:コンテキストは本当にあなたのテーブルですか? '$(" table ")'のように? – Gumbo

0

ザ・「:ない」:

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

することができますsee it in action hereあなたが実際にこのような本とそれ以外のすべてを削除することができますので、擬似セレクタは、パラメータとして別のセレクタを受けます。

これは文脈(テーブルノードを削除したもの)を使用せず、theadの中の「すべて」を含まない子供用オペランドを使用したことを除いて、your commentに書いたものに非常に似ています直接の子供だけが含まれています。子オペランド「>」を削除すると、直接の子ノードだけでなく、ノードの子孫もすべて除外されます。

-1

私は次のようになります:それはあなたがここで何をしようとしては明らかではありません

$('table thead tr:first-child') 
関連する問題