JQuery выбирает атрибут с использованием операторов AND и OR

Я думаю, если в jQuery можно выбрать элементы по именованным атрибутам с помощью AND и OR.

Пример:

<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>

Я хотел бы выделить все элементы, где myc="blue", но только те, у которых myid установлено значение 1 или 3.

Итак, я попробовал:

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

но он не работает, то же самое:

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

Возможно ли это без написания специальных функций фильтра?

Ответ 1

И операция

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

ИЛИ, используйте запятые

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

Как @Vega прокомментировал:

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

Ответ 3

Как писать фильтр, как показано ниже,

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

Изменить: @Jack Спасибо.. полностью пропустил это.

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

DEMO

Ответ 4

Оператор и в селекторе - это просто пустая строка, а оператор или - запятая.

Однако нет группировки или приоритета, поэтому вам нужно повторить одно из условий:

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

Ответ 5

Сначала найдите условие, которое встречается во всех ситуациях, затем отфильтруйте особые условия:

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

Ответ 6

В вашем специальном случае это будет

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

Ответ 7

JQuery использует селектор CSS для выбора элементов, поэтому вам просто нужно использовать несколько правил, разделив их запятыми так:

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

Edit:

Извините, вы хотели синий и 1 или 3. Как насчет:

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

Помещение двух селекторов атрибутов дает вам И, используя запятую, вы получаете ИЛИ.

Ответ 8

Чтобы правильно выбрать элементы, используя указанные логические операции, вам просто нужно jQuery.filter() для операции AND, а не "специальные функции фильтра". Вам также нужно jQuery.add() для операции OR.

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

В качестве альтернативы можно выполнить использование сокращения в одном селекторе, где селекторы помех вместе действуют как AND, а разделение на запятую действует как OR:

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