如何用JavaScript判斷dom是否有存在某class的值?


例如:

<html class="no-js">
<head>
</head>
<body>
</body>
</html>

判斷html節點的class是否有no-js。

1.jquery的實現方式

$("html").hasClass('no-js');

jquery源碼的實現方式:

var rclass = /[\t\r\n\f]/g;

jQuery.fn.extend({
    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;
    }
})

源碼里面用到了nodeType,nodeType是HTML DOM 的nodeType 屬性,nodeType 屬性返回以數字值返回指定節點的節點類型。常用的一般有三種:

  1. 如果節點是元素節點(Element),則 nodeType 屬性將返回 1。
  2. 如果節點是屬性節點(Attr),則 nodeType 屬性將返回 2。
  3. 如果節點是文本節點(Text),則nodeType 屬性將返回 3。

例如,獲得 body 元素的節點類型:

document.body.nodeType;//1

如果想了解更多的節點類型,可查看:HTML DOM nodeType 屬性

2.js的實現方式

function hasClass(element, cls) {
    return (' ' + element.className + ' ').indexOf(' ' + cls + ' ') > -1;
}

hasClass(document.querySelector("html"), 'no-js');

想詳細了解DOM選擇器querySelector,可點擊原生JS強大DOM選擇器querySelector與querySelectorAll》。

3.H5的classList

說明下:

  1. 字符串的indexOf方法是無法區分.no-js.no-js-indeed這樣的類;
  2. 類名的分隔符可能不是空格,還有可能是\t等。

代碼:

var hasClass = (function(){
    var div = document.createElement("div") ;
    if( "classList" in div && typeof div.classList.contains === "function" ) {
        return function(elem, className){
            return elem.classList.contains(className) ;
        } ;
    } else {
        return function(elem, className){
            var classes = elem.className.split(/\s+/) ;
            for(var i= 0 ; i < classes.length ; i ++) {
                if( classes[i] === className ) {
                    return true ;
                }
            }
            return false ;
        } ;
    }
})() ;

alert( hasClass(document.documentElement, "no-js") ) ;

問題地址:https://segmentfault.com/q/1010000002501794


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM