여러 클래스가있는 요소를 가져 오는 방법


133

내가 이것을 가지고 있다고 말하십시오.

<div class="class1 class2"></div>

div요소를 어떻게 선택 합니까?

document.getElementsByClassName('class1')[0].getElementsByClassName('class2')[0]

작동하지 않습니다.

jQuery에서는 $('.class1.class2')이지만 바닐라 JavaScript로 선택하고 싶습니다.

답변:


182

실제로 jQuery와 매우 유사합니다.

document.getElementsByClassName('class1 class2')

MDN 문서 getElementsByClassName


@Joe 지정된 하나입니다, 하나 개의 클래스와 요소를 얻기에 관하여 무엇을
CodeGuru

1
수업은 "."없이옵니다. document.getElementsByClassName ( 'class1 class2')
Misha Beskin

2
주어진 MDN 링크에서 점은 getElements 매개 변수의 클래스 이름 앞에 사용되지 않습니다. 나는 이것을 파이어 폭스와 크롬에서 확인했고 점 없이는 작동했지만 점으로는 작동하지 않았습니다.
Gaurav Singh

39

AND (두 클래스)

var list = document.getElementsByClassName("class1 class2");
var list = document.querySelectorAll(".class1.class2");

OR (적어도 하나의 클래스)

var list = document.querySelectorAll(".class1,.class2");

XOR (한 클래스 만 다른 클래스는 아님)

var list = document.querySelectorAll(".class1:not(.class2),.class2:not(.class1)");

NAND (두 클래스 모두 아님)

var list = document.querySelectorAll(":not(.class1),:not(.class2)");

NOR (두 클래스 중 어느 것도 아님)

var list = document.querySelectorAll(":not(.class1):not(.class2)");

환상적이다. 정상이어야합니다.
Hackstaar

36

표준 클래스 선택 기가 있는 querySelectorAll 도이를 위해 작동합니다.

document.querySelectorAll('.class1.class2');

2
즉, 그것은 수없는 일 필요가 않습니다 document.querySelectorAll('.class1, .class2');
bazzlebrush을

9
@bazzlebrush 선택자는 .class1OR로 요소를 캡처 .class2하는 반면 위 의 선택자는 클래스가있는 요소 만 캡처 하고 실제로 작동합니다. 이 테스트의 콘솔 출력을 참조하십시오. jsfiddle.net/0ph1p9p2
filoxo

좋아, 내 잘못이다. OP가 뭘하고 싶어하는지 오해했다. 그러나 IMO는 더 일반적인 사용 사례는 클래스 중 하나 또는 둘 다를 갖는 요소를 선택하려는 것입니다.이 경우 내 예제가 원하는 것입니다.
bazzlebrush

12

@filoxo가 말했듯이 document.querySelectorAll .

찾고있는 클래스에 하나의 요소 만 있다는 것을 알고 있거나 첫 번째 요소에만 관심이있는 경우 다음을 사용할 수 있습니다.

document.querySelector('.class1.class2');

BTW .class1.class2 클래스 가 모두 있는 요소 를 나타내며 .class1 .class2(공백에 유의) 계층 구조 및 클래스가 class2있는 en 요소 내부에 있는 클래스 요소를 나타냅니다 class1.

<div class='class1'>
  <div>
    <div class='class2'>
      :
      :

직계 자식을 강제로 검색하려면 >기호 ( .class1 > .class2)를 사용 하십시오 .

<div class='class1'>
  <div class='class2'>
    :
    :

선택기에 대한 전체 정보 :
https://www.w3schools.com/jquery/jquery_ref_selectors.asp


1

HTML

<h2 class="example example2">A heading with class="example"</h2>

javascritp 코드

var element = document.querySelectorAll(".example.example2");
element.style.backgroundColor = "green";

querySelectorAll () 메서드는 지정된 CSS 선택기와 일치하는 문서의 모든 요소를 ​​정적 NodeList 객체로 반환합니다.

NodeList 객체는 노드 모음을 나타냅니다. 노드는 인덱스 번호로 액세스 할 수 있습니다. 인덱스는 0에서 시작합니다.

https://www.w3schools.com/jsref/met_document_queryselectorall.asp에 대해 자세히 알아보십시오.

== 감사합니다 ==


1

좋습니다.이 코드는 필요한 작업을 정확히 수행합니다.

HTML :

<div class="class1">nothing happens hear.</div>

<div class="class1 class2">This element will receive yout code.</div>

<div class="class1">nothing happens hear.</div>

JS :

function getElementMultipleClasses() {
    var x = document.getElementsByClassName("class1 class2");
    x[0].innerHTML = "This is the element you want";
}
getElementMultipleClasses();

도움이 되었기를 바랍니다. ;)


0

실제로 @bazzlebrush의 답변과 @filoxo의 의견이 많은 도움이되었습니다.

나는 클래스가 "ZA 요"가 될 수있는 요소를 발견 할 필요가 OR "zA zE"

jquery를 사용하여 먼저 원하는 요소의 부모를 선택합니다.

( 'abc'및 스타일로 시작하는 클래스가있는 div! = 'display : none')

var tom = $('div[class^="abc"][style!="display: none;"]')[0];                   

그런 다음 해당 요소의 원하는 자식 :

var ax = tom.querySelectorAll('.zA.yO, .zA.zE');

완벽하게 작동합니다! document.querySelector를 수행 할 필요가 없습니다. 위와 같이 미리 선택된 개체를 전달할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.