有两个相似的类 - “项”和“项目一个”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