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;
    }
  • 相关阅读:
    服务器迁移总结
    使用OpenSSL生成证书
    mysql Event、存储过程、表命令
    负载均衡 > 常见问题
    SpringMVC记住密码功能
    spring mvc +cookie+拦截器功能 实现系统自动登陆
    android studio之argument for @notnull parameter 'name'
    jQuery ajax表单提交实现局部刷新
    Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法
    ajax表单提交全路径
  • 原文地址:https://www.cnblogs.com/colima/p/6268989.html
Copyright © 2011-2022 走看看