2011-02-11 21 views
6

Chcę wybrać elementy, ale nie, jeśli jeden z ich przodków pasuje do określonego selektora.Jak Negować kontekst

Na przykład, powiedzmy, że chcę dopasować wszystkie węzły <a>, które nie są potomkami tabeli.

Próbowałem coś takiego:

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

ale wywala przeglądarkę.

Ten wisi również przeglądarkę:

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

Strona zapytaliśmy jest dość duży, z dużą ilością bardzo dużych tabel. Potrzebuję więc czegoś, co też działa dobrze. Jakieś pomysły?

Odpowiedz

6

Inne odpowiedzi są zbyt skomplikowane.

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

-lub-

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

Drugi parametr w funkcji jQuery jest kontekst, zgodnie z którymi, aby szukać elementu, ale wybierając :not(table) wybiorą każdy element, który nie jest stół, który obejmuje potomków tabel. Zwykle chcesz użyć parametru context, jeśli masz określony dokument lub element, w którym chcesz szukać.

+0

Dzięki! Co ciekawe, wydajność jest gorsza, gdy nie są skanowane tabele, chyba dlatego, że: selektor nie zajmuje również trochę czasu. – Aaron

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

lub prawdopodobnie będzie szybciej, jeśli są one zawsze bezpośrednie dzieci o <td> tagu

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