document.querySelectorAll(".a, .b")
は、クラスaおよびbに属するすべてのHTML要素のNodeList
を返します。クラスの集合にのみ属するクエリ要素
同様にdocument.getElementsByClassName("a b")
は、同じ要素を含むHTMLCollection
を返します。
これらの結果は、これらの要素に限定されています。これらの要素は、これらのクラスに限定されています。クラスa、b、cに属する要素
document.querySelectorAll(".a, .b")
は、クラスaおよびbに属するすべてのHTML要素のNodeList
を返します。クラスの集合にのみ属するクエリ要素
同様にdocument.getElementsByClassName("a b")
は、同じ要素を含むHTMLCollection
を返します。
これらの結果は、これらの要素に限定されています。これらの要素は、これらのクラスに限定されています。クラスa、b、cに属する要素
あなたがそうのような:not
セレクタを使用することができます。
var abOnly = document.querySelectorAll(".a:not(.c), .b:not(.c)");
console.log(Array.from(abOnly).map(el => el.innerText));
<ul>
<li class="a b">ab</li>
<li class="a b c">abc</li>
<li class="a b">ab</li>
</ul>
:
var hasAB = Array.from(
document.querySelectorAll(".a, .b")
);
var noC = hasAB.filter(el => !el.classList.contains("c"));
console.log(noC.map(el => el.innerText));
<ul>
<li class="a b">ab</li>
<li class="a b c">abc</li>
<li class="a b">ab</li>
</ul>
コメントの後の編集:「より一般的なアプローチ」
高度なクエリを実行するためにquerySelectorAll
とclassList
の組み合わせを使用する方法のいくつかの例:
var twoClassesAB = Array
.from(document.querySelectorAll(".a.b"))
.filter(el => el.classList.length === 2)
.map(innerText)
.join(" ");
var aOrBWithoutC = Array
.from(document.querySelectorAll(".a, .b"))
.filter(el => !el.classList.contains("c"))
.map(innerText)
.join(" ");
console.log("Only a and b, nothing else:", twoClassesAB)
console.log("At least one of a and b, explicitly not c:", aOrBWithoutC)
// Utils
function innerText(el) { return el.innerText; };
<ul>
<li class="a b">ab</li>
<li class="a b c">abc</li>
<li class="a b">ab</li>
<li class="a b d">abd</li>
</ul>
cクラスは単なる例であり、より一般的なものにする必要があります –
配列フィルターを使ってどのようにフィルタリングするかを示すアプローチを追加しました。もちろん、変数クラス名を使用してクエリとフィルタを作成することもできます。あなたは "より一般的な"意味を詳細に説明できますか? – user3297291
長さをチェックすると、クラス.aと.bに属し、他のクラスに属していない要素だけが選択されると思います。 'document.querySelectorAll(" .a、.b ")filter(el => el.classList.length == 2) ' –
は順番ウィル'a'と' b'の値は常に同じですか?もしそうなら 'class'属性の値に基づいて問い合わせることができます。 – BenM
私はあなたが何を求めているのか正確には分かりません。いくつかのサンプルHTMLとあなたが期待する結果で質問を更新することは可能でしょうか? – Jhecht
BenM:実際に注文は同じです。理論的にはそれに頼ることはできません。 –