2つの類似したクラスがあります-「アイテム」と「アイテム1」
使用するdocument.getElementsByClassName('item')
と、上記の両方のクラスに一致するすべての要素が返されます。
'item'クラスのみで要素を取得するにはどうすればよいですか?
2つの類似したクラスがあります-「アイテム」と「アイテム1」
使用するdocument.getElementsByClassName('item')
と、上記の両方のクラスに一致するすべての要素が返されます。
'item'クラスのみで要素を取得するにはどうすればよいですか?
document.querySelectorAll('.item:not(.one)');
(を参照querySelectorAll
)
document.getElementsByClassName('item')
もう1つの方法は、返されるものをループして、one
クラスが存在するかどうかを確認することです。
if(element.classList.contains('one')){
...
}
classnameitem one
は、要素にクラスitem
とクラスがあることを意味しone
ます。
したがって、実行するとdocument.getElementsByClassName('item')
、その要素も返されます。
クラスのみの要素を選択するには、次のようにする必要がありますitem
。
e = document.getElementsByClassName('item');
for(var i = 0; i < e.length; i++) {
// Only if there is only single class
if(e[i].className == 'item') {
// Do something with the element e[i]
alert(e[i].className);
}
}
これにより、要素にクラスのみがあることが確認されitem
ます。
クラス内のスペースは複数のクラスがあることを意味するため、完全一致のために独自の関数を作成する必要があります。何かのようなもの:
function GetElementsByExactClassName(someclass) {
var i, length, elementlist, data = [];
// Get the list from the browser
elementlist = document.getElementsByClassName(someclass);
if (!elementlist || !(length = elementlist.length))
return [];
// Limit by elements with that specific class name only
for (i = 0; i < length; i++) {
if (elementlist[i].className == someclass)
data.push(elementlist[i]);
}
// Return the result
return data;
} // GetElementsByExactClassName
jQueryを使用している場合は、次のような属性と等しいセレクター構文を使用して実行できます$('[class="item"]')
。
を使用することを主張する場合document.getElementsByClassName
は、他の回答を参照してください。
Array.filter
一致したセットをフィルタリングして、クラスを持つセットのみにすることができますtest
。
var elems = Array.filter( document.getElementsByClassName('test'), function(el){
return !!el.className.match(/\s*test\s*/);
});
または、持っているが持ってtest
いないものだけone
:
var elems = Array.filter( document.getElementsByClassName('test'), function(el){
return el.className.indexOf('one') < 0;
});
(Array.filter
ブラウザによっては動作が異なる場合があり、古いブラウザでは使用できません。)ブラウザとの互換性を最大限に高めるには、jQueryが最適です。$('.test:not(.one)')