Ответ 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"]');
Я думаю, если в 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"]');
Возможно ли это без написания специальных функций фильтра?
И операция
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');
});
Оператор и в селекторе - это просто пустая строка, а оператор или - запятая.
Однако нет группировки или приоритета, поэтому вам нужно повторить одно из условий:
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"]');
Edit:
Извините, вы хотели синий и 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"]');