zoukankan      html  css  js  c++  java
  • js实现类名的添加与移除

    方法1:使用className属性;

    方法2:使用classList API; 

    //用于匹配类名存在与否
    function reg(name){
        return new RegExp('(^|\s)'+name+'(\s+|$)');
    }
    
    //hasClass addClass removeClass toogleClass
    var hasClass,addClass,removeClass;
    if('classList' in document.documentElement){
        hasClass = function(obj, cname) {        // obj为要操作的元素对象,cname是类名
            return obj.classList.contains(cname);
        };
        addClass = function(obj, cname) {
            obj.classList.add(cname);
        };
        removeClass = function(obj,cname) {
            obj.classList.remove(cname);
        };
        toggleClass = function(obj, cname) {
            obj.classList.toggle(cname);
        };
    }else{
        hasClass = function(obj, cname) {
            return reg(cname).test(obj.className);
        };
        addClass = function(obj, cname) {
            if(!hasClass(obj,cname)){
                obj.className=obj.className+' '+cname;    
            }
        };
        removeClass = function(obj, cname) {
            obj.className=obj.className.replace(reg(cname),' ');
        };
        toggleClass = function(obj, cname) {
            var toggle=hasClass(obj,cname)?removeClass:addClass;
            toggle(obj,cname);
        };
    }
    
    //true
    document.body.classList.toString() === document.body.className;

    注意:这种方法每次只能传一个类名且不能级联操作,而jquery下面的类似操作是可以操作多个类名的。

    所以扩展一下:

    //addClass
    DOMTokenList.prototype.addClass = function(str) {
      tts.split(' ').forEach(function(c){
        this.add(c);
      }.bind(this));
      return this;
    }
    
    //removeClass
    DOMTokenList.prototype.removeClass = function(str) {
      tts.split(' ').forEach(function(t){
        this.remove(t);
      }.bind(this));
      return this;
    }
    
    //removeClass
    DOMTokenList.prototype.toggleClass = function(str) {
      tts.split(' ').forEach(function(t){
        this.toggle(t);
      }.bind(this));
      return this;
    }
  • 相关阅读:
    Python基本数据类型
    DNS服务
    在浏览器地址栏输入百度网址之后的故事(面试必考)
    C++对象的赋值和复制
    C++区别于其他语言的知识点总结
    SQL连接查询(最全面)
    源码堆栈信息保存 到此一游
    linux 内核调试之关键函数名记要
    记几个命令 转
    JS 奇淫巧技 转
  • 原文地址:https://www.cnblogs.com/colima/p/6268989.html
Copyright © 2011-2022 走看看