jQuery выбирает атрибут с использованием операторов AND и OR
Я думаю, если в jQuery можно выбрать элементы по именованным атрибутам с помощью AND и OR.
Пример:
1 2 3 4
Я бы хотел выделить все элементы, где myc="blue"
но только те, у которых myid
установлен на 1 или 3.
- Сравнение равенств между несколькими переменными
- Как перегрузить оператор квадратной скобки в C #?
- Что делает оператор ^ в Java?
- Что делает оператор запятой?
- Что такое i = (i, ++ i, 1) + 1; делать?
Поэтому я попробовал:
a=$('[myc="blue"] [myid="1"] [myid="3"]');
но это не работает, то же самое:
a=$('[myc="blue"] && [myid="1"] || [myid="3"]');
Возможно ли, если вы не будете писать специальные функции фильтра?
- Является ли оператор экспоненты в C #?
- Конструктор преобразования и оператор преобразования: приоритет
- Зачем использовать оператор Bitwise-Shift для значений в определении enum C?
- Какова категория значений операндов операторов C ++, когда они не указаны?
- Списки инициализаторов и RHS операторов
- Перегрузка оператора в C ++ как int + obj
- Можно ли передавать арифметические операторы методу в java?
- Реализация операторов сравнения через «tuple» и «tie» - хорошая идея?
И операция
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"]');