关于jQuery源代码(addClass)的问题
您能解释addClass中“if(jQuery.isFunction(value))”中的以下逻辑吗?我不明白它的目的是什么。谢谢关于jQuery源代码(addClass)的问题,jquery,Jquery,您能解释addClass中“if(jQuery.isFunction(value))”中的以下逻辑吗?我不明白它的目的是什么。谢谢 addClass: function( value ) { var classNames, i, l, elem, setClass, c, cl; if ( jQuery.isFunction( value ) ) { return this.each(function( j )
addClass: function( value ) {
var classNames, i, l, elem,
setClass, c, cl;
if ( jQuery.isFunction( value ) ) {
return this.each(function( j ) {
jQuery( this ).addClass( value.call(this, j, this.className) );
});
}
if ( value && typeof value === "string" ) {
classNames = value.split( rspace );
for ( i = 0, l = this.length; i < l; i++ ) {
elem = this[ i ];
if ( elem.nodeType === 1 ) {
if ( !elem.className && classNames.length === 1 ) {
elem.className = value;
} else {
setClass = " " + elem.className + " ";
for ( c = 0, cl = classNames.length; c < cl; c++ ) {
if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
setClass += classNames[ c ] + " ";
}
}
elem.className = jQuery.trim( setClass );
}
}
}
}
return this;
},
addClass:函数(值){
变量类名,i,l,elem,
setClass,c,cl;
if(jQuery.isFunction(value)){
返回此。每个函数(j){
jQuery(this.addClass)(value.call(this,j,this.className));
});
}
if(value&&typeof value==“string”){
classNames=value.split(rspace);
对于(i=0,l=this.length;i
看看文档,里面可能有一个函数
.addClass(函数(索引,currentClass))
功能(索引,
currentClass)返回一个或多个空格分隔类的函数
要添加的名称。接收元素在中的索引位置
将和旧类值设置为参数。在函数中,这个
指集合中的当前元素
看一看这张照片。您将看到有一种调用addClass
的方法,它将函数作为第一个参数传递。函数接收元素并返回要添加的类名:
返回一个或多个要添加的以空格分隔的类名的函数。接收集合中元素的索引位置和旧类值作为参数。在函数中,此
引用集合中的当前元素
所以你可以这样做:
$('.someElements').addClass(function(i, currentClass) {
return 'newClass' + i;
});
选择的第一个元素将添加类newClass0
,第二个newClass1
,等等
使用您发布的代码:
if (jQuery.isFunction(value)) {
return this.each(function (j) {
jQuery(this).addClass(value.call(this, j, this.className));
});
}
上面说:
this
值)、循环中的位置作为第一个参数以及className
属性作为第二个参数来调用函数addClass
方法这在报告中有解释。它用于测试传递的参数是否是返回以空格分隔的类列表的函数您可以在.addClass()函数中使用函数,如:
$(document).ready(function() {
$("li").addClass(function(i) {
return "li" + i;
});
});
试试这个
function addClass(elem, className) {
if (!hasClass(elem, className)) {
elem.className += ' ' + className;
}
}
很好的解释。谢谢。@lonesomeday:为什么这指的是选定的元素?你还没有解释什么。