2011-02-11 14 views
6

Quiero seleccionar elementos, pero no si uno de sus antepasados ​​coincide con un cierto selector.Cómo negar un contexto

Por ejemplo, supongamos que quiero hacer coincidir todos los nodos <a> que no son descendientes de una tabla.

que hemos probado algo como esto:

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

pero que se estrella mi navegador.

Esto también se cuelga mi navegador:

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

La página consultada es bastante grande, con un montón de tablas muy grandes. Entonces, necesito algo que funcione bien también. ¿Algunas ideas?

Respuesta

6

Las otras respuestas son cosas que complican demasiado.

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

-o-

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

El segundo parámetro de la función jQuery es el contexto en el que la búsqueda de un elemento, pero la selección :not(table) seleccionará cada elemento que no es una tabla, que incluye descendientes de tablas. Por lo general, desea utilizar el parámetro de contexto cuando tiene un documento o elemento específico bajo el cual desea buscar.

+0

Gracias! Curiosamente, el rendimiento es peor cuando no se escanean las tablas, supongo porque el selector: no toma algo de tiempo también. – Aaron

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

o probablemente será más rápido si son siempre los hijos directos de una etiqueta <td>

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