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


104

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>

すべての要素を選択したいのですが、1または3に設定されてmyc="blue"いる要素のみを選択しますmyid

だから私は試した:

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

しかし、それは機能しません、ここで同じです:

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

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


7
注意:mycやのような独自の属性を構成するべきではありませんmyid。HTML5を使用している場合は、それらの前にdata-data-mycおよびを付けdata-myidます。
RoToRa

@ RoToRa、HTML5には、そのようにする必要があると記載されているドキュメントはありますか?私が目にするほとんどのWebサイトは、開発者の頭脳が当時考えていたものを何でも使用しています...
Alexis Wilke

1
人々がそうするからといって、それが正しいという意味ではありません。HTML5のセクション3.2.1を参照してください。「著者は、この仕様または他の適用可能な仕様で許可されていない要素、属性、または属性値を使用してはなりません。そうすると、将来言語を拡張することが著しく難しくなります。」
RoToRa 2015

1
これは良い質問の悪い例です。入力のような異なる要素タイプはどうですか?
jesus g_force Harris 2018

回答:


192

AND演算

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

OR演算、カンマを使用

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

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

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

1
彼が欲しいのはmyc == blue && (id == 1 || id == 3)
セルバクマル・アルムガム

2
私が使用する場合a=$('[myc="blue"] [myid="1"],[myid="3"]');は、それが意味するの([myc="blue"] AND [myid="1"]) OR [myid="3"]([myc="blue"]) AND ([myid="1"] OR [myid="3"]) 、2番目の// Edit:を探しているのか、その更新をありがとう!:-)
2012年

18

複数のセレクター[ドキュメント](OR)を使用した簡単な.filter() [ドキュメント](AND ):

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

一般的に、セレクターのチェーンa.foo.bar[attr=value]は、ある種のANDセレクターのようなものです。

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


これがgabeからの回答よりも速い場合、あなたは知っていますか?
Bndr、2012年

わからない、多分、多分そうではない。
フェリックスクリング

10

以下のようなフィルターを書いてみませんか、

$('[myc="blue"]').filter(function () {
   return (this.id == '1' || this.id == '3');
});

編集: @ジャックありがとう..完全にそれを逃した..

$('[myc="blue"]').filter(function() {
   var myId = $(this).attr('myid');   
   return (myId == '1' || myId == '3');
});

デモ


5

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

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

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

あなたはそれらの引用が必要ですか?私は一貫性のためだけに..多分私だけを意味します。>。<
Selvakumar Arumugam

1
@ベガ:のような単純な文字列の引用符は必要ありませんがblue、数値については不明だったので、そのままにしました。
Guffa

5

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

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

1

あなたの特別なケースでは

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

0

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

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

編集:

青と1または3が必要でした。

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

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


1
彼が欲しいのはmyc == blue && (id == 1 || id == 3)
セルバクマル・アルムガム

[myc="blue"]2番目の例では、セレクターを繰り返す必要があります。
RoToRa

-1

述べた論理演算を使用して要素を適切に選択するには、「特殊なフィルター関数」ではなく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"]');
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.