web-dev-qa-db-ja.com

ANDおよびOR演算子を使用した属性によるjQuery選択

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"]');

特別なフィルター関数を書かなくても可能ですか?

90
The Bndr

および操作

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

または操作、コンマを使用

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

@Vegaがコメントしたように:

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

シンプルな使用 .filter()[ドキュメント] (AND) 複数セレクターを使用して [ドキュメント] (OR):

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

一般に、a.foo.bar[attr=value]などのセレクターの連鎖は、ある種のANDセレクターです。

jQueryには、サポートされているセレクターに関する 詳細なドキュメント がありますので、読む価値があります。

16
Felix Kling

以下のようなフィルターを作成してみてください。

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

10

最初にすべての状況で発生する条件を見つけてから、特別な条件をフィルタリングします。

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

セレクターのand演算子は空の文字列であり、or演算子はコンマです。

ただし、グループ化や優先順位はないため、次のいずれかの条件を繰り返す必要があります。

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

あなたの特別な場合には

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

JQueryはCSSセレクターを使用して要素を選択するため、次のように複数のルールをコンマで区切って使用するだけです。

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

編集:

申し訳ありませんが、青と1または3が必要でした。

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

2つの属性セレクターを組み合わせるとANDが得られ、コンマを使用するとORが得られます。

0
philnash