tag section name jquery jquery-selectors

section - jQuery OR Selector?



selector by tag jquery (5)

Me pregunto si hay una manera de tener lógica "O" en los selectores jQuery. Por ejemplo, sé que un elemento es descendiente de un elemento con clase classA o classB, y quiero hacer algo como elem.parents(''.classA or .classB'') . ¿Ofrece jQuery dicha funcionalidad?


Daniel A. White Solution funciona muy bien para las clases.

Tengo una situación en la que tuve que encontrar campos de entrada como donee_1_card donde 1 es un índice.

Mi solución ha sido

$("input[name^=''donee'']" && "input[name*=''card'']")

Aunque no estoy seguro de cuán óptimo es.


El uso de una coma puede no ser suficiente si tiene varios objetos jQuery que deben unirse.

El método .add() agrega los elementos seleccionados al conjunto de resultados:

// classA OR classB jQuery(''.classA'').add(''.classB'');

Es más detallado que ''.classA, .classB'' , pero le permite crear selectores más complejos como los siguientes:

// (classA which has <p> descendant) OR (<div> ancestors of classB) jQuery(''.classA'').has(''p'').add(jQuery(''.classB'').parents(''div''));


He escrito un complemento increíblemente simple (5 líneas de código) para exactamente esta funcionalidad:

http://byrichardpowell.github.com/jquery-or/

Le permite decir efectivamente "obtener este elemento, o si ese elemento no existe, use este elemento". Por ejemplo:

$( ''#doesntExist'' ).or( ''#exists'' );

Si bien la respuesta aceptada proporciona una funcionalidad similar a esta, si existen ambos selectores (antes y después de la coma), se devolverán ambos selectores.

Espero que sea útil para cualquier persona que pueda llegar a esta página a través de google.


Si estás buscando usar la construcción estándar de element = element1 || Element2 donde JavaScript devolverá el primero que es veraz, podría hacer exactamente eso:

element = $(''#someParentElement .somethingToBeFound'') || $(''#someParentElement .somethingElseToBeFound'');

Lo que devolvería el primer elemento que realmente se encuentra. Pero una mejor manera probablemente sería usar la construcción de coma jQuery selector (que devuelve una matriz de elementos encontrados) de esta manera:

element = $(''#someParentElement'').find(''.somethingToBeFound, .somethingElseToBeFound'')[0];

que devolverá el primer elemento encontrado.

Lo utilizo de vez en cuando para encontrar un elemento activo en una lista o algún elemento predeterminado si no hay ningún elemento activo. Por ejemplo:

element = $(''ul#someList'').find(''li.active, li:first'')[0]

que devolverá cualquier li con una clase de activo o, si no hubiera ninguno, solo devolverá el último li.

Cualquiera funcionará. Sin embargo, hay posibles penalizaciones de rendimiento, como el || dejará de procesar tan pronto como encuentre algo verdadero, mientras que el enfoque de matriz intentará encontrar todos los elementos, incluso si ya ha encontrado uno. Entonces otra vez, usando el || la construcción podría tener problemas de rendimiento si tiene que pasar por varios selectores antes de encontrar el que devolverá, porque tiene que llamar al objeto jQuery principal para cada uno (realmente no sé si se trata de un impacto de rendimiento o no Simplemente parece lógico que pueda ser). En general, sin embargo, utilizo el enfoque de matriz cuando el selector es una cadena bastante larga.


Usa una coma.

''.classA, .classB''

Puede optar por omitir el espacio.