簡體   English   中英

檢查元素是否有類的最佳方法是什么?

[英]What is the best way to check if element has a class?

問題

如果元素有多個類,那么它將與常規屬性值檢查不匹配,所以我正在尋找檢查對象是否在元素的className屬性中具有特定類的最佳方法。

// element's classname is 'hello world helloworld'
var element = document.getElementById('element');

// this obviously fails
if(element.className == 'hello'){ ... }

// this is not good if the className is just 'helloworld' because it will match
if(element.className.indexOf('hello') != -1){ ... }  

那么最好的方法是什么呢?

只是純粹的JavaScript請

function hasClass( elem, klass ) {
     return (" " + elem.className + " " ).indexOf( " "+klass+" " ) > -1;
}

在現代瀏覽器中,您可以使用classList

if (element.classList.contains("hello")) {
   // do something
}  

在沒有實現classList但暴露DOM原型的瀏覽器中,您可以使用鏈接中顯示的填充程序。

否則,您可以使用相同的墊片代碼來獲得通用函數,而無需操作原型。

這2018年使用ES6

const hasClass = (el, className) => el.classList.contains(className);

如何使用

hasClass(document.querySelector('div.active'), 'active'); // true

你要求純javascript,所以這就是jQuery如何實現它:

    hasClass: function( selector ) {
        var className = " " + selector + " ",
            i = 0,
            l = this.length;
        for ( ; i < l; i++ ) {
            if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
                return true;
            }
        }
        return false;
    },

rclass[\\n\\t\\r]的正則表達式,以確保分隔類名稱的替代方法不是問題。 this將是jQuery對對象的引用,並且在某種意義上它使代碼比所需的更復雜,但它應該是有意義的而不知道它的細節。

這應該適合你:

var a = [];
function getElementsByClassName(classname, node)  {
    if(!node) node = document.getElementsByTagName("body")[0];

    var re = new RegExp('\\b' + classname + '\\b');
    var els = node.getElementsByTagName("*");
    for(var i=0, j=els.length; i<j; i++)
        if(re.test(els[i].className)) a.push(els[i]);
        return a;
}

getElementsByClassName('wrapper');
for (var i=0; i< a.length; i++) {
    console.log(a[i].className);
}

此代碼將遍歷DOM並搜索在main函數中定義為參數的類。然后它將使用正則表達式模式測試每個已創建的類元素。 如果它被發現將推送到一個數組,並將輸出結果。

首先,使用“”字符拆分className,然后檢查要查找的類的索引。

function hasClass(element, clazz) {
    return element.className.split(" ").indexOf(clazz) > -1;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM