Estou pensando se é possível em jQuery selecionar elementos por atributos nomeados usando AND e OR.
Exemplo:
<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>
Eu gostaria de selecionar todos os elementos onde, myc="blue"
mas apenas aqueles com myid
definido como 1 ou 3.
Então eu tentei:
a=$('[myc="blue"] [myid="1"] [myid="3"]');
mas não funciona, mesmo aqui:
a=$('[myc="blue"] && [myid="1"] || [myid="3"]');
É possível sem escrever funções de filtro especiais?
jquery
jquery-selectors
find
operators
O Bndr
fonte
fonte
myc
emyid
. Se você estiver usando HTML5, prefixe-os comdata-
:data-myc
edata-myid
.Respostas:
Operação E
Operação OR , use vírgulas
Como @Vega comentou:
fonte
myc == blue && (id == 1 || id == 3)
a=$('[myc="blue"] [myid="1"],[myid="3"]');
isso significa([myc="blue"] AND [myid="1"]) OR [myid="3"]
ou([myc="blue"]) AND ([myid="1"] OR [myid="3"])
estou procurando o segundo // Editar: obrigado por essa atualização! :-)Uso simples
.filter()
[docs] (AND) usando o seletor múltiplo [docs] (OR):Em geral, os seletores de encadeamento, como
a.foo.bar[attr=value]
é uma espécie de seletor AND.jQuery tem uma extensa documentação sobre os seletores suportados, vale a pena ler.
fonte
Que tal escrever um filtro como abaixo,
Edit: @Jack Obrigado .. perdi totalmente ..
DEMO
fonte
O operador and em um seletor é apenas uma string vazia e o operador ou é a vírgula.
No entanto, não há agrupamento ou prioridade, então você deve repetir uma das condições:
fonte
blue
, mas eu não tinha certeza sobre os valores numéricos, então os guardei.Primeiro encontre a condição que ocorre em todas as situações e, em seguida, filtre as condições especiais:
fonte
No seu caso especial, seria
fonte
JQuery usa seletores CSS para selecionar elementos, então você só precisa usar mais de uma regra, separando-os com vírgulas, da seguinte forma:
Editar:
Desculpe, você queria azul e 1 ou 3. Que tal:
Colocar os dois seletores de atributo juntos fornece AND, usando uma vírgula fornece OR.
fonte
myc == blue && (id == 1 || id == 3)
[myc="blue"]
seletor no segundo exemplo.Para selecionar corretamente os elementos usando as operações lógicas que você definiu, você só precisa
jQuery.filter()
daAND
operação, não de "funções de filtro especiais". Você também precisajQuery.add()
para aOR
operação.Alternativamente, é possível realizar usando taquigrafia em um único seletor, onde seletores de interferência juntos atuam como um
AND
e separando com uma vírgula atua como umOR
:fonte