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;
},