2016-12-25 2 views
0

document.querySelectorAll(".a, .b")は、クラスaおよびbに属するすべてのHTML要素のNodeListを返します。クラスの集合にのみ属するクエリ要素

同様にdocument.getElementsByClassName("a b")は、同じ要素を含むHTMLCollectionを返します。

これらの結果は、これらの要素に限定されています。これらの要素は、これらのクラスに限定されています。クラスa、b、cに属する要素

+0

は順番ウィル'a'と' b'の値は常に同じですか?もしそうなら 'class'属性の値に基づいて問い合わせることができます。 – BenM

+0

私はあなたが何を求めているのか正確には分かりません。いくつかのサンプルHTMLとあなたが期待する結果で質問を更新することは可能でしょうか? – Jhecht

+0

BenM:実際に注文は同じです。理論的にはそれに頼ることはできません。 –

答えて

1

あなたがそうのような: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>

ます。また、ハーフクエリ半分-jsからアプローチして行くことができる

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>

コメントの後の編集:「より一般的なアプローチ」

高度なクエリを実行するためにquerySelectorAllclassListの組み合わせを使用する方法のいくつかの例:

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>

+0

cクラスは単なる例であり、より一般的なものにする必要があります –

+0

配列フィルターを使ってどのようにフィルタリングするかを示すアプローチを追加しました。もちろん、変数クラス名を使用してクエリとフィルタを作成することもできます。あなたは "より一般的な"意味を詳細に説明できますか? – user3297291

+0

長さをチェックすると、クラス.aと.bに属し、他のクラスに属していない要素だけが選択されると思います。 'document.querySelectorAll(" .a、.b ")filter(el => el.classList.length == 2) ' –

関連する問題