测试一个类
现代浏览器提供了一个 classList
对象,以便于操作元素的 class 属性。较旧的浏览器需要直接操作元素的 className
属性。
*注意类名不以任何特定顺序存储在元素的属性中
W3C DOM < 4
测试元素是否包含类需要对 className
属性进行一些操作。此示例使用数组方法来测试类。
function hasClass(el, name) {
var classes = (el && el.className || "").split(/\s+/);
return classes.indexOf(name) > -1;
}
var el = document.getElementById("link1");
console.log(hasClass(el, "foo"));
测试多个类名称需要循环。
function hasClass(el, name) {
name = name.split(/[\s.]+/);
var hasClass = true,
classes = (el && el.className || "").split(/\s+/),
index = name.length;
while (index--) {
hasClass = hasClass && classes.indexOf(name[index]) > -1;
}
return hasClass;
}
var el = document.getElementById("link1");
console.log(hasClass(el, "foo"));
你也可以考虑使用正则表达式,而不是使用 .indexOf()
。
function hasClass(el, name) {
return new RegExp("\\b" + name+ "\\b").test(el.className);
}
var el = document.getElementById("link1");
console.log(hasClass(el, "foo"));
W3C DOM >= 4
单个类名称的测试完成如下:
var hasClass = document.querySelector("#link1").classList.contains("foo");
对于多个类名,使用 matches
更容易。注意使用类选择器; 选择器可以是任何有效的字符串选择器(id,attribute,伪类等)。
var hasClass = document.querySelector("#link1").matches('.foo.bar');
var hasClass = document.querySelector("#link2").matches('a.bar[href]');