DOM类名操作

118 阅读1分钟

hasClass

  • 求交集
HTMLElement.prototype.hasClass = function(cln){
        // this 是元素
        let str = this.className;
        // str = str.trim();//可以直接去除首尾空格;
        str = str.replace(/^ +| +$/g,'');//可以直接去除首尾空格;
        let ary = str.split(/ +/);
        cln = cln.replace(/^ +| +$/g,'');
        // return ary.indexOf(cln) == -1 ? false : true
        let arr = cln.split(/ +/);
        // 可以使用 ary 和 arr 的交集数组 与 arr进行长度的比较
        let temp = [];// 交集数组
        for(let i = 0; i < arr.length; i++){
            ary.indexOf(arr[i]) == -1 ? null : temp.push(arr[i])
        }
        return temp.length === arr.length
    }
  • 边界法
HTMLElement.prototype.hasClass = function(cln){
        if(!cln.replace(/^ +| +$/g,'').length)return false;
        let arr = cln.replace(/^ +| +$/g,'').split(/ +/);
        // let ary = this.className.replace(/^ +| +$/g,'').split(/ +/);
        let str = this.className;
        let flag = true;
        for(let i =0; i < arr.length; i++){
            let reg = new RegExp(`\\b${arr[i]}\\b`);
            //   /\bqqq\b/ /(^| +)qqq( +|$)/
            if(!reg.test(str)){
                flag = false;
                break;
            }
        }
        return flag;
    }

addClass

HTMLElement.prototype.addClass = function(cln){
        if(this.hasClass(cln))return;
        let arr = cln.replace(/^ +| +$/g,'').split(/ +/);
        let str = this.className;
        arr.forEach(item=>{
            this.hasClass(item)?null:str += ' '+item
        })
        str = str.replace(/^ +| +$/g,'').replace(/ +/g,' ')
        this.className = str;
    }

removeClass

HTMLElement.prototype.removeClass = function(cln){
        if(!this.hasClass(cln))return;
        let arr = cln.replace(/^ +| +$/g,'').split(/ +/);
        let str = this.className;
        arr.forEach(item=>{
            let reg = new RegExp('\\b'+item+'\\b','g');
            str = str.replace(reg,'');
        })
        str = str.replace(/^ +| +$/g,'').replace(/ +/g,' ')
        this.className = str;
    }

toggleClass

 HTMLElement.prototype.toggleClass = function(cln){
        if(this.hasClass(cln)){
            this.removeClass(cln)
        }else{
            this.addClass(cln)
        }
    }