Pregunta jQuery selecciona por atributo usando operadores AND y OR


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 con myid establecer a 1 o 3.

Así que lo 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 especiales de filtro?


76
2018-05-21 14:25


origen


Respuestas:


Y operación

a=$('[myc="blue"][myid="1"][myid="3"]');

O operación, usar comas

a=$('[myc="blue"],[myid="1"],[myid="3"]');

Como @Vega comentó:

a=$('[myc="blue"][myid="1"],[myc="blue"][myid="3"]');

145
2018-05-21 14:27



Uso simple .filter()  [docs] (Y) usando el selector múltiple  [docs] (O):

$('[myc="blue"]').filter('[myid="1"],[myid="2"]');

En general, encadenar selectores, como a.foo.bar[attr=value] es algún tipo de selector AND.

jQuery tiene extensa documentación acerca de los selectores compatibles, vale la pena leerlo.


14
2018-05-21 14:31



¿Qué hay de escribir un filtro como a continuación,

$('[myc="blue"]').filter(function () {
   return (this.id == '1' || this.id == '3');
});

Editar: @Jack Gracias ... lo extrañé por completo ...

$('[myc="blue"]').filter(function() {
   var myId = $(this).attr('myid');   
   return (myId == '1' || myId == '3');
});

MANIFESTACIÓN


10
2018-05-21 14:27



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 o prioridad, por lo que debe repetir una de las siguientes condiciones:

a=$('[myc=blue][myid="1"],[myc=blue][myid="3"]');

5
2018-05-21 14:29



Primero encuentre la condición que ocurre en todas las situaciones, luego filtre las condiciones especiales:

$('[myc="blue"]')
    .filter('[myid="1"],[myid="3"]');

5
2018-05-21 14:33



En su caso especial, sería

a=$('[myc="blue"][myid="1"],[myc="blue"][myid="3"]');

1
2018-05-21 14:30



JQuery usa selectores CSS para seleccionar elementos, por lo que solo necesita usar más de una regla separándolas con comas, así:

a=$('[myc="blue"], [myid="1"], [myid="3"]');

Editar:

Lo siento, querías azul y 1 o 3. ¿Qué tal:

a=$('[myc="blue"][myid="1"],  [myid="3"]');

Poner los dos selectores de atributos juntos te da AND, usando una coma te da OR.


-1
2018-05-21 14:27