码迷,mamicode.com
首页 > Web开发 > 详细

jQuery val()方法源码解读

时间:2015-02-06 12:47:20      阅读:359      评论:0      收藏:0      [点我收藏+]

标签:

    val: function( value ) {
        var hooks, ret, isFunction,
            elem = this[0];

        if ( !arguments.length ) {//无参数
            if ( elem ) {//第一个元素
                //考虑元素是checkbox,radio,option或者select的情况,这时有val钩子
                hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
                //如果钩子存在且有get 且获取的值不为undefined,返回该值
                if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
                    return ret;
                }
                //否则,ret就是元素的value
                ret = elem.value;
                //如果值是字符串
                return typeof ret === "string" ?
                    //将换行符替换为""
                    ret.replace(rreturn, "") :
                    // 如果值不是字符串,考虑null和undefined的情况,如果是null或undefined,ret置为""
                    ret == null ? "" : ret;
            }

            return;
        }
        //判断传入的参数value是否是函数
        isFunction = jQuery.isFunction( value );
        //遍历设值
        return this.each(function( i ) {
            var val;

            if ( this.nodeType !== 1 ) {//如果不是元素节点,返回
                return;
            }

            if ( isFunction ) {//如果是函数 函数的参数第一个是索引,第二个是对应的值
                val = value.call( this, i, jQuery( this ).val() );
            } else {
                val = value;
            }

            //如果val是null或者undefined,设为""
            if ( val == null ) {
                val = "";
            //如果val是数字,转为字符串
            } else if ( typeof val === "number" ) {
                val += "";
            //如果val是数组    
            } else if ( jQuery.isArray( val ) ) {//处理数组中的undefined null 和数字
                val = jQuery.map( val, function( value ) {
                    return value == null ? "" : value + "";
                });
            }
            //同样地,考虑元素是checkbox,radio,option或者select的情况
            hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];

            // 如果set返回了undefined,回退到正常值val
            if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
                this.value = val;
            }
        });
    }

valHooks to be continue

jQuery val()方法源码解读

标签:

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

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