• 原生JavaScript实现的addclass,removeclass,hasclass,toggleclass,getbyclass


    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title>addclass,removeclass,hasclass,toggleclass,getbyclass</title>
    </head>
    <body>
    <div class="div1" id="box1"></div>
    <input type="button" value="按钮" id="btn1"/>
    <script>
        function addClass(obj,cls) {//obj:要添加classname的元素,cls:要添加的classname;
            //如果原来没有class:
            if(obj.className == ''){
                obj.className = cls;
            } else {
                //本来已经有class,新增class的情况:
                var arrclassname = obj.className.split(' ');//
                var index = arrIndexOf(arrclassname,cls);
                if(index == -1) {
                    //如果要添加的class在原来的元素上不存在:
                    obj.className += ' ' + cls;
                }
            }
        }
    
        function arrIndexOf(arr,v){//检测数组中是否有相同的值存在,并且返回它的位置;
            for(var i=0;i<arr.length;i++){
                if(arr[i] == v){
                    return i;
                }
            }
            return -1;
        }
    
        function removeClass(obj,cls){
            //如果有class的话:
            if(obj.className != ''){
                var arrClassName = obj.className.split(' ');//对原有class进行拆分,看看是否包含需要移除的class,也就是传参cls的classname;
                var index = arrIndexOf(arrClassName,cls);
                //r如果有需要移除的class
                if(index != -1){
                    arrClassName.splice(index,1);
                    obj.className = arrClassName.join('');
                }
            }
        }
    
        function hasClass(obj,cls){
            var cls = cls || '';
            if( cls.replace(/s/g,'').length == 0){
                return false;//当cls没有参数时,返回false;
            }else{
                return new RegExp(' ' + cls + '').test(' ' + obj.className);
            }
        }
    
        function toggleClass(obj,cls){
            hasClass(obj,cls) ? removeClass(obj,cls) : addClass(obj,cls);
        }
    
        function getByClass(oParent, sClass) {
            if (oParent.getElementsByClassName) {
                return oParent.getElementsByClassName(sClass);
            } else {  //IE 8 7 6
                var arr = [];
                var reg = new RegExp('\b' + sClass + '\b');
                var aEle = oParent.getElementsByTagName('*');
                for (var i = 0; i < aEle.length; i++) {
                    if (reg.test(aEle[i].className)) {
                        arr.push(aEle[i]);
                    }
                }
                return arr;
            }
        }
    
        var oBtn1 = document.getElementById('btn1');
        var oBox1 = document.getElementById('box1');
        oBtn1.onclick = function () {
            if( hasClass(oBox1,'div1') ){
                alert('hasclass');
            };
    
            alert( getByClass(document,'div1').length );
        }
    
    </script>
    
    </body>
    </html>
  • 相关阅读:
    CentOS 7部署KVM之三基本管理
    CentOS 7部署KVM之二安装配置
    CentOS 7部署KVM之一架构介绍
    DOM 事件流
    渐进增强与优雅降级
    (三)跟我一起玩Linux网络服务:DHCP服务配置之主服务器配置
    (二)跟我一起玩Linux网络服务:BIND的自动部署(附上完整的代码)
    责任链模式--行为模式
    装饰模式--- 结构型模式
    elastic-job+zookeeper实现分布式定时任务调度的使用(springboot版本)
  • 原文地址:https://www.cnblogs.com/codinganytime/p/5228087.html
Copyright © 2020-2023  润新知