jQuery.fn.extend( { val: function( value ) { var hooks, ret, isFunction, elem = this[ 0 ]; //elem为jQuery工具匹配的之一个DOM米素 //无参数传入时 if ( !arguments.length ) { if ( elem ) { //若是jQuery有匹配到DOM米素的话 //钩子判断与执行:匹配用户自界说的钩子函数,并执行和返回 hooks = jQuery.valHooks[ elem.type ] || //若是valHooks有type属性,赋值对应钩子 jQuery.valHooks[ elem.nodeName.toLowerCase() ]; //若是valHooks有与DOM节点名相关的属性,赋值对应钩子 if ( // 若是界说了钩子及相关方式,挪用钩子函数处置并返回 hooks && "get" in hooks && ( ret = hooks.get( elem, "value" ) ) !== undefined ) { return ret; } ret = elem.value; //无钩子时,直接取米素的value值 return typeof ret === "string" ? // 返回字符串:处置一样平常情形下的返回值 ret.replace( rreturn, "" ) : // 返回非字符串:value为null/undefined,返回空串;其余情形,返回ret ret == null ? "" : ret; } return; //若是jQuery工具未匹配到DOM米素时,直接返回 } //传入一个参数时的情形:函数,非函数 isFunction = jQuery.isFunction( value ); //判断传入参数是否为函数,为后续条件开关做准备 return this.each( function( i ) { //实例方式.each():对匹配到的每一个DOM米素,执行括号中的函数:obj[i].callback(i); var val; if ( this.nodeType !== 1 ) { //当前DOM米素不为米素节点时,直接返回 return; } if ( isFunction ) { //若是传入参数为函数类型,val=obj[i].value(i,obj的value属性值) val = value.call( this, i, jQuery( this ).val() ); //[注:value的两个形参,我们不用给它手动传值,会在val函数内部自动传值,一个代表DOM米素的索引,一个代表DOM米素当前的value属性的值] } else { val = value; //若是传入参数不为函数类型,val=传入参数; } // 将val为null/undefined的情形,统一处置为空串 if ( val == null ) { val = ""; } else if ( typeof val === "number" ) { val += ""; } else if ( jQuery.isArray( val ) ) { val = jQuery.map( val, function( value ) { return value == null ? "" : value + ""; } ); } //有传参的情形下的,钩子判断与执行:匹配用户自界说的钩子函数,并执行和返回 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; // 若是钩子的"set"属性未界说,依旧返回上面一样平常情形下处置的效果 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { this.value = val; } } ); } } );
相关代码:
var hooks, ret, isFunction, elem = this[ 0 ]; //elem为jQuery工具匹配的之一个DOM米素 //无参数传入时 if ( !arguments.length ) { if ( elem ) { //若是jQuery有匹配到DOM米素的话 //钩子判断与执行:匹配用户自界说的钩子函数,并执行和返回 hooks = jQuery.valHooks[ elem.type ] || //若是valHooks有type属性,赋值对应钩子 jQuery.valHooks[ elem.nodeName.toLowerCase() ]; //若是valHooks有与DOM节点名相关的属性,赋值对应钩子 if ( // 若是界说了钩子及相关方式,挪用钩子函数处置并返回 hooks && "get" in hooks && ( ret = hooks.get( elem, "value" ) ) !== undefined ) { return ret; } ret = elem.value; //无钩子时,直接取米素的value值 return typeof ret === "string" ? // 返回字符串:处置一样平常情形下的返回值 ret.replace( rreturn, "" ) : // 返回非字符串:value为null/undefined,返回空串;其余情形,返回ret ret == null ? "" : ret; } return; //若是jQuery工具未匹配到DOM米素时,直接返回 }
说明:
1.jQuery工具没有匹配到DOM米素时,直接返回.
2.先举行钩子函数相关的判断(挪用),若是钩子知足以下几个条件,执行钩子函数并返回:
3.否则,返回elem的value属性的属性值.
相关代码:
if ( isFunction ) { //若是传入参数为函数类型,val=obj[i].value(i,obj的value属性值) val = value.call( this, i, jQuery( this ).val() ); } else { val = value; //若是传入参数不为函数类型,val=传入参数; } //有传参的情形下的,钩子判断与执行:匹配用户自界说的钩子函数,并执行和返回 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; // 若是钩子的判断不通过,依旧返回上面一样平常情形下处置的效果 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { this.value = val; }
说明:(value为非函数类型情形下)
1.同样,先举行钩子的判断,若是知足以下几个条件,if条件判断语句中的三个表达式依次执行,设置好当前DOM米素value属性值:
2.否则,直接设置当前DOM米素的value属性值为传入的参数
相关代码:
if ( isFunction ) { //若是传入参数为函数类型,val=obj[i].value(i,obj的value属性值) val = value.call( this, i, jQuery( this ).val() ); //[注:value的两个形参,我们不用给它手动传值,会在val函数内部自动传值,一个代表DOM米素的索引,一个代表DOM米素当前的value属性的值] } else { val = value; //若是传入参数不为函数类型,val=传入参数; } // 将val为null/undefined的情形,统一处置为空串 if ( val == null ) { val = ""; } else if ( typeof val === "number" ) { val += ""; } else if ( jQuery.isArray( val ) ) { val = jQuery.map( val, function( value ) { return value == null ? "" : value + ""; } ); } //有传参的情形下的,钩子判断与执行:匹配用户自界说的钩子函数,并执行和返回 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; // 若是钩子的"set"属性未界说,依旧返回上面一样平常情形下处置的效果 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { this.value = val; }
说明:(value为函数类型情形下)
1.令val=obj[i].value(i,jQuery( this ).val());
[注]
2.同样,先举行钩子的判断,若是知足以下几个条件,if条件判断语句中的三个表达式依次执行,设置好当前DOM米素value属性值:
3.否则,直接设置val为当前米素的value属性值
泉源:https://www.cnblogs.com/peterzhangsnail/archive/2018/12/02/10054533.html
1.阿里云: 本站现在使用的是阿里云主机,平安/可靠/稳固。点击领取2000米代金券、领会最新阿里云产物的种种优惠流动点击进入
现在装修市场一片火爆,很多业主的装修都陆陆续续开工,那么装修如何选购地板!这个问题也是很多装修业主纠结的问题。马可波罗小编也是询问过很多业主,大部分业主表示:“世面上的地板品牌五花八门,选购起来眼花缭...
文章来源|MS08067 WEB攻防知识星球本文作者:爱吃芝士的小葵(Ms08067实验室追洞小组成员)漏洞复现分析 认准追洞小组1、靶场搭建2、漏洞复现3、漏洞分析4、漏洞修复5、心得靶场搭建使用i...
美国28个州已出现英国发现的新冠病毒变异株 海外网1月28日电 据CNN报道,当地时间27日,美国疾控中心公布的数据显示,美国28个州已经出现英国发现的新冠病毒变异株,累计确诊病例达315例...
在今年的FIRST青年影展斩获“最佳纪录片”和“观众选择荣誉”两项大奖的记录片《棒!少年》已于12月11在全国上映。 这部将棒球与贫困儿童结合起来的记录片凭借着...
天南地北话古今,东拉西扯来一段。柴米油盐酱醋茶,今天观音说点啥。说一个那到一个,拿麦千万别沉默。语音就是为娱乐,擦皮鞋是我工作。我的文化才。 YY文儿唱过,优酷大概也能搜到.百度文er擦皮鞋我擦了DJ...