jquery addClass 方法分析

addClass: function( value ) {
        //初始化Jq对象的属性
        var classes, elem, cur, clazz, j, finalValue,
            proceed = typeof value === "string" && value,//看看传进来的东西是不是string类型
            i = 0,
            len = this.length;

        //如果传一个数组进来则递归调用自己
        if ( jQuery.isFunction( value ) ) {
            return this.each(function( j ) {
                jQuery( this ).addClass( 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++]) ) {//给clazz 附上当前class 
                        if ( cur.indexOf( " " + clazz + " " ) < 0 ) { // 原来的对象里 找 clazz  如果找不到则添加进去
                            cur += clazz + " ";
                        }
                    }

                    finalValue = jQuery.trim( cur );//去首尾空
                    if ( elem.className !== finalValue ) {//如果class不为空 则添加属性
                        elem.className = finalValue;
                    }
                }
            }
        }

        return this;
    },

 

posted @ 2015-10-15 11:55  大赚佬  阅读(442)  评论(0)    收藏  举报