2011-02-11 1 views
6

要素を選択したいが、その祖先の1つが特定のセレクタと一致するかどうかはわからない。コンテキストを否定する方法

たとえば、テーブルの子孫でないノード<a>をすべて一致させたいとします。

私はこのような何か試してみました:

$("a", ":not(table *)"); 

をそれは私のブラウザがクラッシュします。

この1つはまた私のブラウザをハング:

jQuery("a", ":not(table td)"); 

照会ページが非常に大きなテーブルがたくさんで、非常に大きいです。だから、私もうまくいくものが必要です。何か案は?

答えて

6

他の答えは、複雑すぎるものです。

$('a').not('table a'); 

- または -

$('a:not(table a)'); 

jQuery関数の2番目のパラメータは、要素を検索する下コンテキストが、:not(table)を選択するテーブルない要素を選択します、テーブルの子孫も含まれます。通常は、特定の文書や要素を検索するときにcontextパラメータを使用します。

+0

ありがとうございました!興味深いことに、テーブルをスキャンしていないときのパフォーマンスは悪くなります。セレクタでは時間がかかるからです。 – Aaron

0
$('a').not(function() { 
    return $(this).closest('table').length > 0; 
}); 

または彼らは常に<td>タグ

$('a').not(function() { 
    return $(this).parent('td').length > 0; 
}); 
0

利用の直接の子である場合はそう速くなります。

$("a").not("td a") 

this fiddleをチェックしてください。

関連する問題