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

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

Пример:

1
2
3
4

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

Поэтому я попробовал:

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

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

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

Возможно ли, если вы не будете писать специальные функции фильтра?

И операция

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

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

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

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

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

Простое использование .filter() [docs] (AND) с использованием множественного селектора [docs] (OR):

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

В общем, селектор цепочки, такой как a.foo.bar[attr=value] является своего рода селектором AND.

jQuery имеет обширную документацию о поддерживаемых селекторах, ее стоит прочитать.

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

 $('[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

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

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

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

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

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

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

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

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

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

Редактировать:

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

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

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

Чтобы правильно выбрать элементы, используя указанные логические операции, вам просто нужно 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"]'); 
  • Есть ли условный тернарный оператор в VB.NET?
  • Каковы основные правила и идиомы для перегрузки оператора?
  • Логический оператор XOR в C ++?
  • Как различаются операторы сравнения с равенством равенства (== double equals) и идентичности (=== triple equals)?
  • Какие хорошие право-ассоциативные методы в Scala?
  • Что означает функция%>% в R?
  • Что делает C ??! ??! оператор?
  • Почему выражение a = a + b - (b = a) дает предупреждение о точке последовательности в c ++?
  • В чем преимущество linspace над двоеточием: «оператор?
  • Почему «оператор void» не вызывается с синтаксисом броска?
  • Как работает оператор побитового дополнения (~ тильда)?
  • Давайте будем гением компьютера.