jQuery.access()方法

最开始只是想了解attr方法,发现它内部调用了jQuery.access()方法。除了attr,还有prop、text、html、css、data 都是内部调用了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...

时间: 2024-10-10 10:18:00

jQuery.access()方法的相关文章

jquery工具方法access详解

access : 多功能值操作(内部) access方法可以使set/get方法在一个函数中体现.比如我们常用的css,attr都是调用了access方法. css的使用方法: $(selector).css(key)  //get$(selector).css(key,valye)  //set$(selector).css({key1:valye1,key2:value2})  //set$(selector).css(function(){ ............. })  //set

使用jquery的方法和技巧

1.下载一个jquery.js的文件 2.引入jquery.js文件 1 <script type="text/javascript" src="__PUBLIC__/js/jquery-1.7.2.min.js"></script> 2 <script type="text/javascript"> 3 $(function(){ 4 5 //这里面使用jquery的方法 6 7 8 }); 9 </s

使用jquery的方法和技巧2,点击多选框的jquery响应

使用jquery来控制多选框的变化 功能描述: 1.第一层 当选中后台应用(App1)时,所有多选框都被选择. 当取消选中后台应用(App1)时,所有多选框都被取消选择. 第一层的逻辑如下: 2.第二层 a.对所有亲子多选框而言 当选择帖子管理(控制器Action02)时,所有亲子多选框被选择. 当取消选择帖子管理(控制器Action02)时,所有亲子多选框被取消选择. b.对亲父级多选框:后台应用(App1)而言 当选择帖子管理(控制器Action02)时,亲父App多选框被选择. 当取消选择

jQuery.access的作用

jQuery.access为attr,prop,css,html等方法提供通用的键值设置/读取方法 // 用于设置和获取集合的值的多用途方法 // 当value/s为function时,可以被选择地执行 access: function( elems, fn, key, value, chainable, emptyGet, pass ) { var exec, bulk = key == null, i = 0, length = elems.length; // 如果key是属性集合,分多次

jQuery.access源码分析

基本理解 jQuery.attr是jQuery.attr,jQuery.prop,jQuery.css提供底层支持,jQuery里一个比较有特色的地方就是函数的重载, 比如attr,有如下几种重载 $('#box').attr('title') $('#box').attr('title','标题') $('#box').attr({title:'标题',data-menu-toggle:'dropdown'}) $('#box').attr('title',function () {....}

jquery源码解析:jQuery工具方法详解4

jQuery的工具方法,其实就是静态方法,源码里面就是通过extend方法,把这些工具方法添加给jQuery构造函数的. jQuery.extend({ ...... guid: 1, //唯一标识符,跟事件有关.举个例子:function show(){alert(this);}, $("#input1").click(show),$("#input2").click(function(){$("#input1").off()}),这里的sho

jquery ajax 方法及各参数详解

jquery ajax 方法及各参数详解 1.$.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数信息. 参数列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET".注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分

jQuery on()方法绑定动态元素的点击事件无响应的解决办法

$('#check_all').on('click' , function(){ alert(1); }); $("#yujinlist").append(html); count++; } 以上代码执行时,点击#check_all时,alert一直没反应,后在网上查资料时,才知道on前面的元素也必须在页面加载的时候就存在于dom里面, 那原话是这样的: 支持给动态元素和属性绑定事件的是live和on,其中live在JQUERY 1.7之后就不推荐使用了.现在主要用on,使用on的时候

jQuery on()方法

jQuery on()方法是官方推荐的绑定事件的一个方法. $(selector).on(event,childSelector,data,function,map) 由此扩展开来的几个以前常见的方法有. bind() $("p").bind("click",function(){ alert("The paragraph was clicked."); }); $("p").on("click",func