有兩個相似的類 - 「項」和「項目一個」document.getElementsByClassName精確匹配
當我使用document.getElementsByClassName('item')
返回匹配上述兩個類的所有元素。
我如何才能獲得元素'物品'類?
有兩個相似的類 - 「項」和「項目一個」document.getElementsByClassName精確匹配
當我使用document.getElementsByClassName('item')
返回匹配上述兩個類的所有元素。
我如何才能獲得元素'物品'類?
類名item 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
。
document.querySelectorAll('.item:not(.one)');
的另一種方式是環比什麼document.getElementsByClassName('item')
回報,並檢查one
類存在(或不):
if(element.classList.contains('one')){
...
}
你會想爲精確匹配自己的功能,因爲在一類空間意味着它有多個類。喜歡的東西:
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
您可以使用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將是極好的這樣:$('[class="item"]')
:$('.test:not(.one)')
如果您有jQuery的,它可以使用attribute equals selector語法這樣做。
如果您堅持使用document.getElementsByClassName
,請參閱其他答案。
最後一個不是類似的班級,而是完全相同的班級,***班級和***班級,空間分隔意味着兩個不同的班級! – adeneo 2013-02-24 18:42:48