jQuery源码解读之removeClass()方法分析


Posted in Javascript onFebruary 20, 2015

本文较为详细的分析了jQuery源码解读之removeClass()方法。分享给大家供大家参考。具体分析如下:

removeClass()方法和addClass()差别不大。这就来看看:

jQuery.fn.extend({

    removeClass: function( value ) {

        var classes, elem, cur, clazz, j, finalValue,

            i = 0,

            len = this.length,

            proceed = arguments.length === 0 || typeof value === "string" && value;

        if ( jQuery.isFunction( value ) ) {

            return this.each(function( j ) {

//这里就是根据你传递的移除类名的函数返回的类名,再次调用removeClass自身了。

                jQuery( this ).removeClass( value.call( this, j, this.className ) );

            });

        }

        if ( proceed ) {

            classes = ( value || "" ).match( rnotwhite ) || [];

            for ( ; i < len; i++ ) {

                elem = this[ i ];

                cur = elem.nodeType === 1 && ( elem.className ?

                    ( " " + elem.className + " " ).replace( rclass, " " ) :

                    ""

                );

                if ( cur ) {

                    j = 0;

                    while ( (clazz = classes[j++]) ) {

//区别在下面的while循环,当检索到当前DOM元素包含你要移除的类名,会用replace替换成" "

                        while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {

                            cur = cur.replace( " " + clazz + " ", " " );

                        }

                    }

//下面也是关键区别之一,判断你是否传递了要移除的类名value。如果没有传递,则finalValue="",如果此时DOM元素有类名的话,也就是条件为true,移除DOM元素的所有类名;

//如果传递了,则移除匹配的类名,移除后,没有移除的类名拼接成了cur,去掉左右两端的空格字符串,将DOM元素的类名设置成cur。

                    finalValue = value ? jQuery.trim( cur ) : "";

                    if ( elem.className !== finalValue ) {

                        elem.className = finalValue;

                    }

                }

            }

        }

        return this;

    }

});

希望本文所述对大家的jQuery程序设计有所帮助。

Javascript 相关文章推荐
一个JavaScript继承的实现
Oct 24 Javascript
奉献给JavaScript初学者的编写开发的七个细节
Jan 11 Javascript
javascript实现控制的多级下拉菜单
Jul 05 Javascript
基于jquery实现在线选座订座之影院篇
Aug 24 Javascript
JavaScript中利用各种循环进行遍历的方式总结
Nov 10 Javascript
JS &amp; JQuery 动态添加 select option
Jun 08 Javascript
AngularJS 支付倒计时功能实现思路
Jun 05 Javascript
关于JS与jQuery中的文档加载问题
Aug 22 jQuery
什么是Vue.js框架 为什么选择它?
Oct 17 Javascript
angular基于ng-alain定义自己的select组件示例
Feb 23 Javascript
Vue自定义指令实现checkbox全选功能的方法
Feb 28 Javascript
解决vuecli3.0热更新失效的问题
Sep 19 Javascript
jQuery源码解读之addClass()方法分析
Feb 20 #Javascript
jQuery源码解读之hasClass()方法分析
Feb 20 #Javascript
jQuery源码解读之removeAttr()方法分析
Feb 20 #Javascript
JS实现5秒钟自动封锁div层的方法
Feb 20 #Javascript
js实现感应鼠标图片透明度变化的方法
Feb 20 #Javascript
js实现鼠标感应向下滑动隐藏菜单的方法
Feb 20 #Javascript
js实现鼠标滚轮控制图片缩放效果的方法
Feb 20 #Javascript
You might like
php简单实现快速排序的方法
2015/04/04 PHP
php中文乱码问题的终极解决方案汇总
2017/08/01 PHP
thinkPHP框架中执行事务的方法示例
2018/05/31 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
JQuery小知识
2010/10/15 Javascript
js/html光标定位的实现代码
2013/09/23 Javascript
javascript打印输出json实例
2013/11/11 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
浅析基于WEB前端页面的页面内容搜索的实现思路
2014/06/10 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
2015/03/04 Javascript
javascript实现在线客服效果
2015/07/15 Javascript
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
jQuery可见性过滤选择器用法示例
2016/09/09 Javascript
JS验证不重复验证码
2017/02/10 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
webpack4 SCSS提取和懒加载的示例
2018/09/03 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
[01:13:59]LGD vs Mineski Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
Django中间件基础用法详解
2019/07/18 Python
Python reversed函数及使用方法解析
2020/03/17 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
管道维修工岗位职责
2013/12/27 职场文书
幼儿教师年度个人总结
2015/02/05 职场文书
学生逃课万能检讨书2000字
2015/02/17 职场文书
2015年幼儿园保育员工作总结
2015/04/23 职场文书
关于保护环境的建议书
2019/06/24 职场文书
SpringBoot集成Druid连接池连接MySQL8.0.11
2021/07/02 Java/Android