Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于jQuery源代码(addClass)的问题_Jquery - Fatal编程技术网

关于jQuery源代码(addClass)的问题

关于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中“if(jQuery.isFunction(value))”中的以下逻辑吗?我不明白它的目的是什么。谢谢

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
    属性作为第二个参数来调用函数
  • 然后使用步骤3的结果调用
    addClass
    方法

  • 这在报告中有解释。它用于测试传递的参数是否是返回以空格分隔的类列表的函数

    您可以在.addClass()函数中使用函数,如:

    $(document).ready(function() {
        $("li").addClass(function(i) {
            return "li" + i;
        });
    });
    

    试试这个

     function addClass(elem, className) {
            if (!hasClass(elem, className)) {
                elem.className += ' ' + className;
            }
        }
    

    很好的解释。谢谢。@lonesomeday:为什么这指的是选定的元素?你还没有解释什么。