这里cur变量被一个条件语句赋值
这个三元表达式是如果elem.className为真则返回( " " + elem.className + " " ).replace( rclass, " " )
为什么不是直接就rclass + elem.className + rclass
如果为假就返回" "
假设返回了" "
这个当if语句的判断条件是怎么判断的if(" ")怎么理解?
addClass: function( value ) {
var classes, elem, cur, clazz, j,
i = 0,
len = this.length,
proceed = typeof value === "string" && value; if ( jQuery.isFunction( value ) ) { return this.each(function( j ) {
jQuery( this ).addClass( value.call( this, j, this.className ) );
});
} if ( proceed ) {
// The disjunction here is for better compressibility (see removeClass) classes = ( value || "" ).match( core_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++]) ) {
if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
cur += clazz + " ";
}
}
elem.className = jQuery.trim( cur ); }
}
} return this;
},

解决方案 »

  1.   

    cur = 
    elem.nodeType === 1 
    && ( elem.className ?( " " + elem.className + " " ).replace( rclass, " " ) :" ")
    ;
    cur被定义成一个boll类型  ,上述语句赋值 crl=  后面是条件
    elem.nodeType === 1 并且  【 elem.className 存在时 替换rclass 为空字符 不存在时为空】操作完成那么cur就是true   否则为false其实 按照这个代码 elem.className ?( " " + elem.className + " " ).replace( rclass, " " ) :" " 并不应该算是cur赋值的条件,只能算是elem.nodeType === 1 时进行的一个操作,也就是说  只要elem.nodeType === 1   cur就是true,只不过当elem.nodeType === 1时  需要处理elem.className   所以就放一起了。
      

  2.   

    打错字   应该是bool
      

  3.   

    你这个要实现什么?
    下面这个是jquery的addClass的实现过程。
    addClass: function( value ) {
    if ( jQuery.isFunction(value) ) {
    return this.each(function(i) {
    var self = jQuery(this);
    self.addClass( value.call(this, i, self.attr("class")) );
    });
    } if ( value && typeof value === "string" ) {
    var classNames = (value || "").split( rspace ); for ( var i = 0, l = this.length; i < l; i++ ) {
    var elem = this[i]; if ( elem.nodeType === 1 ) {
    if ( !elem.className ) {
    elem.className = value; } else {
    var className = " " + elem.className + " ";
    for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
    if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
    elem.className += " " + classNames[c];
    }
    }
    }
    }
    }
    } return this;
    }