如何用JavaScript判断dom是否有存在某class的值? 原生JS强大DOM选择器querySelector与querySelectorAll

前端之家收集整理的这篇文章主要介绍了如何用JavaScript判断dom是否有存在某class的值? 原生JS强大DOM选择器querySelector与querySelectorAll前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

例如:

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

判断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 = 0this.length;
        for (; i < l; i++) {
            if (this[i].nodeType === 1 &&
                (" " + this[i].className + " ").replace(rclass," ").indexOf(className) > -1) {
                return true;
            }
        }

        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的实现方式

 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 = ((){
    var div = document.createElement("div") ;
    if( "classList" in div && typeof div.classList.contains === "function" ) {
        (elem,className){
            return elem.classList.contains(className) ;
        } ;
    } else {
        var classes = elem.className.split(/\s+/) ;
            for(var i= 0 ; i < classes.length ; i ++if( classes[i] === className ) {
                     ;
                }
            }
             ;
        } ;
    }
})() ;

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

问题地址:https://segmentfault.com/q/1010000002501794

猜你在找的JavaScript相关文章