AND 및 OR 연산자를 사용하여 속성별로 jQuery 선택


105

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
NB : 당신은 같은 자신의 속성을 구성해서는 안 mycmyid. HTML5를 사용하는 경우 data-: data-mycdata-myid.
RoToRa

@RoToRa, HTML5에 그렇게해야한다고 말하는 문서가 있습니까? 대부분의 웹 사이트는 내가 개발자의 뇌가 ... 시간에 대해 생각대로 사용 참조
알렉시스 WILKE

1
사람들이 그렇게한다고해서 그것이 옳다는 의미는 아닙니다. HTML5 섹션 3.2.1을 참조하십시오 . "저자는이 사양 또는 기타 적용 가능한 사양에서 허용하지 않는 요소, 속성 또는 속성 값을 사용해서는 안됩니다. 그렇게하면 향후 언어를 확장하기가 상당히 어려워집니다."
RoToRa

1
좋은 질문의 형편없는 예입니다. 입력과 같은 다른 요소 유형은 어떻습니까?
예수 g_force Harris

답변:


193

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)
Selvakumar Arumugam

2
내가 사용 a=$('[myc="blue"] [myid="1"],[myid="3"]');하는 경우 의미가 ([myc="blue"] AND [myid="1"]) OR [myid="3"]있거나 ([myc="blue"]) AND ([myid="1"] OR [myid="3"]) 두 번째를 찾고 있습니다. // 편집 : 업데이트에 감사드립니다! :-)
The Bndr

18

다중 선택기 [문서] (OR)를 사용하여 .filter() [문서] (AND)를 간단하게 사용 :

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

일반적으로 연결 선택자는 a.foo.bar[attr=value]일종의 AND 선택기와 같습니다.

jQuery에는 지원되는 선택기에 대한 광범위한 문서 가 있으므로 읽어 볼 가치가 있습니다.


이것이 gabe의 답변보다 빠르다면 아십니까?
The Bndr

모르겠어요, 어쩌면 아닐 수도 있습니다.
Felix Kling

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
@Vega :와 같은 간단한 문자열에는 따옴표가 필요하지 않지만 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"]');

두 속성 선택기를 함께 사용하면 AND가 제공되고 쉼표를 사용하면 OR이 제공됩니다.


1
내 생각에, 그가 원하는 것은myc == blue && (id == 1 || id == 3)
Selvakumar Arumugam

[myc="blue"]두 번째 예에서 선택기 를 반복해야합니다 .
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.