Me pregunto si hay una manera de tener la lógica "OR" en los selectores jQuery. Por ejemplo, sé que un elemento es un descendiente de un elemento con clase classA o classB, y quiero hacer algo así elem.parents('.classA or .classB')
. ¿JQuery proporciona dicha funcionalidad?
jquery
jquery-selectors
Suan
fuente
fuente
AND
sería.classA.classB
.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:
Es más detallado que
'.classA, .classB'
, pero le permite crear selectores más complejos como el siguiente:fuente
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 "obtenga este elemento, o si ese elemento no existe, use este elemento". Por ejemplo:
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 cualquiera que pueda acceder a esta página a través de Google.
fuente
"a" || "b"
vs.null || "b"
en vanilla JS. Si aplicamos el mismo comportamiento aquí,$(a).or(b)
debería regresar$(a)
si existe, de lo contrario debería regresar$(b)
. No creo que haya nada malo con esta nomenclatura, ya que "o" coincide con el comportamiento de JS "||" (o) operador.or
. De lo que otros están hablando es más como unaconcat
omerge
acción.Si está buscando usar la construcción estándar de element = element1 || element2 donde JavaScript devolverá el primero que sea verdadero, podría hacer exactamente eso:
que devolvería el primer elemento que se encuentre realmente. Pero una mejor manera probablemente sería usar la construcción de coma del selector jQuery (que devuelve una matriz de elementos encontrados) de esta manera:
que devolverá el primer elemento encontrado.
Lo uso de vez en cuando para encontrar un elemento activo en una lista o algún elemento predeterminado si no hay un elemento activo. Por ejemplo:
que devolverá cualquier li con una clase de activo o, si no hubiera ninguno, solo devolverá el último li.
Cualquiera de los dos funcionará. Sin embargo, existen posibles sanciones de rendimiento, ya que || detendrá el procesamiento tan pronto como encuentre algo verdadero, mientras que el enfoque de matriz intentará encontrar todos los elementos, incluso si ya ha encontrado uno. Por otra parte, utilizando el || La construcción podría tener problemas de rendimiento si tiene que pasar por varios selectores antes de encontrar el que devolverá, ya que tiene que llamar al objeto jQuery principal para cada uno (realmente no sé si esto es un golpe de rendimiento o no, simplemente parece lógico que pueda ser). Sin embargo, en general, uso el enfoque de matriz cuando el selector es una cadena bastante larga.
fuente
Finalmente encontré hackear cómo hacerlo:
(selecciona div con clase
classA
ORclassB
con intervalo secundario directo)fuente
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
Aunque no estoy seguro de lo óptimo que es.
fuente