複数のクラスを持つ要素を取得する方法


132

私がこれを持っていると言います:

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

このdiv要素を選択するにはどうすればよいですか?

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

それは機能しません。

jQueryではそうですが$('.class1.class2')、バニラJavaScriptで選択したいと思います。

回答:


180

これは実際にはjQueryと非常によく似ています。

document.getElementsByClassName('class1 class2')

MDNドキュメントgetElementsByClassName


@Joeで指定されたものである1つのクラスのみを持つ要素を取得するのはどうですか
CodeGuru

1
私が覚えているように、クラスには "。"がありません。document.getElementsByClassName( 'class1 class2')
ミシャベスキン'15

2
指定されたMDNリンクでは、getElementsパラメータのクラス名の前にドットが使用されていません。私はFirefoxとChromeでこれをチェックしましたが、ドットなしで機能しましたが、ドットはありませんでした。
Gaurav Singh

38

AND (両方のクラス)

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

OR (少なくとも1つのクラス)

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 (2つのクラスのいずれでもない)

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

これは素晴らしいです。トップでなければなりません。
ハックスター

36

標準のクラスセレクターを持つquerySelectorAllもこれに対して機能します。

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

2
それは機能しません、それが必要です document.querySelectorAll('.class1, .class2');
bazzlebrush

9
@bazzlebrushセレクタは.class1OR .class2で要素をキャプチャしますが、上記のものは両方のクラスの要素のみをキャプチャし、実際に機能します。このテストのコンソール出力を参照してください:jsfiddle.net/0ph1p9p2
filoxo

わかりました、悪いことに、OPが何をしたいのかを誤解しました。しかし、IMOのより一般的な使用例は、クラスまたは両方を持つ要素を選択することです。この場合、私の例が必要です。
bazzlebrush 2017

12

@filoxoが言ったように、あなたは使うことができますdocument.querySelectorAll

探しているクラスに要素が1つしかないことがわかっている場合、または最初の要素だけに関心がある場合は、次のように使用できます。

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

ところで、両方のクラス.class1.class2を持つ要素を示してますが、.class1 .class2(空白に注意してください)階層を示しています-そして、クラスclass2を持つ要素内にあるクラスを持つ要素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 yO"になる可能性のある要素を見つける必要がありましたOR「zA zE」に

jqueryを使用して、まず目的の要素の親を選択します。

( 'abc'で始まり、スタイルが!= 'display:none'のクラスを持つdiv)

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.