測試一個類
現代瀏覽器提供了一個 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]');