Estoy pensando en si es posible en jQuery seleccionar elementos por atributos con nombre usando AND y OR.
Ejemplo:
<div myid="1" myc="blue">1</div>
<div myid="2" myc="blue">2</div>
<div myid="3" myc="blue">3</div>
<div myid="4">4</div>
Me gustaría seleccionar todos los elementos donde, myc="blue"
pero solo aquellos que están myid
configurados en 1 o 3.
Así que intenté:
a=$('[myc="blue"] [myid="1"] [myid="3"]');
pero no funciona, lo mismo aquí:
a=$('[myc="blue"] && [myid="1"] || [myid="3"]');
¿Es posible sin escribir funciones de filtro especiales?
jquery
jquery-selectors
find
operators
El Bndr
fuente
fuente
myc
ymyid
. Si está utilizando HTML5 como prefijodata-
:data-myc
ydata-myid
.Respuestas:
Y operación
O operación, use comas
Como comentó @Vega:
fuente
myc == blue && (id == 1 || id == 3)
a=$('[myc="blue"] [myid="1"],[myid="3"]');
¿significa([myc="blue"] AND [myid="1"]) OR [myid="3"]
o([myc="blue"]) AND ([myid="1"] OR [myid="3"])
estoy buscando el segundo? // Editar: ¡gracias por esa actualización! :-)Uso simple
.filter()
[docs] (Y) usando el selector múltiple [docs] (OR):En general, encadenar selectores, como
a.foo.bar[attr=value]
es una especie de selector AND.jQuery tiene una extensa documentación sobre los selectores compatibles, vale la pena leerlo.
fuente
¿Qué tal escribir un filtro como el siguiente?
Editar: @Jack Gracias ... me lo perdí totalmente ...
MANIFESTACIÓN
fuente
El operador y en un selector es solo una cadena vacía y el operador o es la coma.
Sin embargo, no hay agrupación ni prioridad, por lo que debe repetir una de las condiciones:
fuente
blue
, pero no estaba seguro de los valores numéricos, así que las guardé.Primero encuentre la condición que ocurre en todas las situaciones, luego filtre las condiciones especiales:
fuente
En tu caso especial sería
fuente
JQuery usa selectores CSS para seleccionar elementos, por lo que solo necesita usar más de una regla separándolos con comas, así:
Editar:
Lo siento, querías azul y 1 o 3. Qué tal:
Poner los dos selectores de atributos juntos le da Y, usar una coma le da OR.
fuente
myc == blue && (id == 1 || id == 3)
[myc="blue"]
selector en el segundo ejemplo.Para seleccionar correctamente los elementos utilizando las operaciones lógicas que ha indicado, solo necesita
jQuery.filter()
laAND
operación, no las "funciones de filtro especiales". También necesitasjQuery.add()
para laOR
operación.Alternativamente, es posible lograrlo usando taquigrafía en un solo selector, donde los selectores de interferencia juntos actúan como un
AND
y separándolos con una coma actúa como unOR
:fuente