zoukankan      html  css  js  c++  java
  • 如何用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 = /[	
    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. 类名的分隔符可能不是空格,还有可能是 等。

    代码:

    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

  • 相关阅读:
    property函数
    robotframework常见问题解决汇总
    python 基本的序列和映射规则
    robot framework -记录错误
    python 函数部分
    python-文件操作
    网络检测,版本更新
    应用FMDB进行数据存储
    xcode5 各区域快捷键大全
    全国第七届大学生计算机设计大赛
  • 原文地址:https://www.cnblogs.com/moqiutao/p/6392424.html
Copyright © 2011-2022 走看看