码迷,mamicode.com
首页 > 数据库 > 详细

jQuery.access()方法

时间:2014-11-23 23:07:56      阅读:850      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   sp   for   on   div   

最开始只是想了解attr方法,发现它内部调用了jQuery.access()方法。除了attr,还有prop、texthtmlcssdata 都是内部调用了jQuery.access()方法,可见它的重要。

    attr: function( name, value ) {
        return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
    }
    prop: function( name, value ) {
        return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
    }
    text: function( value ) {
        return jQuery.access( this, function( value ) {
            //code
        }, null, value, arguments.length );
    }
    html: function( value ) {
        return jQuery.access( this, function( value ) {
           //code
        }, null, value, arguments.length );
    }
    css: function( name, value ) {
        return jQuery.access( this, function( elem, name, value ) {
      //code
        }, name, value, arguments.length > 1 );
    }
    data: function( key, value ) {
    //code
        return jQuery.access( this, function( value ) {
        //code
        }, null, value, arguments.length > 1, null, true );
    }

源码分析:

    access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
        var i = 0,
            length = elems.length,//jquery对象的长度
            bulk = key == null;//false

        // Sets many values
        if ( jQuery.type( key ) === "object" ) {//键值对方式赋值
            chainable = true;//链式
            for ( i in key ) {//遍历递归调用自身
                jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
            }

        // Sets one value
        } else if ( value !== undefined ) {//单赋值
            chainable = true;//链式
            //这种情况也是赋值 如.attr( attributeName, function(index, attr) )传入的value就是一个函数
            if ( !jQuery.isFunction( value ) ) {//如果第四个参数不是函数,raw为true
                raw = true;
            }

            if ( bulk ) {//key为null或者undefined时
                // Bulk operations run against the entire set
                if ( raw ) {
                    fn.call( elems, value );//不知道这种情况什么时候出现
                    fn = null;

                // ...except when executing function values
                } else {
                    bulk = fn;
                    fn = function( elem, key, value ) {
                        return bulk.call( jQuery( elem ), value );
                    };
                }
            }

            if ( fn ) {//如果第二个参数函数存在
                for ( ; i < length; i++ ) {//对jquery数组中的每一个元素调用回调
                    //如果value不是函数 fn(elems[i], key,value);
                    //如果value是函数:fn(elems[i], key,value.call( elems[i], i, fn( elems[i], key )));
                    fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
                }
            }
        }

        return chainable ? //如果是链式
            elems : //返回jquery对象

            // Gets 不是链式,是获取值
            bulk ? //key为undefined或者null
                fn.call( elems ) :
                length ? fn( elems[0], key ) : emptyGet; //如果jquery对象有长度,获取对象第一个元素的键值,没长度,返回emptyGet
    }

目前的疑问:

1、什么情况下key的值为null和undefined

to be continue...

 

jQuery.access()方法

标签:style   blog   io   ar   color   sp   for   on   div   

原文地址:http://www.cnblogs.com/qianlegeqian/p/4117489.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!