首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

求教一段jquery代码,该如何解决

2013-07-09 
求教一段jquery代码这里cur变量被一个条件语句赋值这个三元表达式是如果elem.className为真则返回( +

求教一段jquery代码
这里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;
},

[解决办法]
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   所以就放一起了。

[解决办法]
打错字   应该是bool
[解决办法]
你这个要实现什么?
下面这个是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;
}

热点排行