jQuery属性操作之.val()函数

访客4年前黑客工具427

val()实例方式的三种用法

  1. $('xxx').val() : 获取匹配的米素聚集中之一个米素的当前value属性值(property)
  2. $('xxx').val(value) : 设置匹配的米素聚集中每个米素的value属性值(property)
  3. $('xxx').val(function(index,value){}) :
  • 钩子函数未设置或无效时,将函数function(index,value)的返回值设为每一个DOM米素的value属性值(property).
  • 其中,两个形参不需要传值,index指代当前DOM米素的在jQuery工具中的索引,value指代当前DOM工具的旧的value属性值.


.val()函数源码

    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;
            }
        } );
    }
} );   


挪用形式:$('xxx').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.先举行钩子函数相关的判断(挪用),若是钩子知足以下几个条件,执行钩子函数并返回:

  • 钩子之中存在type属性 或者 存在与当前DOM米素节点同名的属性
  • 钩子之中存在get属性
  • 挪用get,获得的返回值不为undefined

3.否则,返回elem的value属性的属性值.


挪用形式:$('xxx').val(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属性值:

  • 钩子之中存在type属性 或者 存在与当前DOM米素节点同名的属性
  • 钩子之中存在set属性
  • 挪用set,获得的返回值不为undefined

2.否则,直接设置当前DOM米素的value属性值为传入的参数


挪用形式:$('xxx').val(function(index,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());
[注]

  • value函数两个形参由本函数自动传值,自行传值无效.
  • 传参i-当前DOM米素在jQuery工具中的索引值
  • 传参jQuery( this ).val()-将当前DOM米素包装为jQuery工具,以便以无参形式挪用val方式获得的value属性旧值.

2.同样,先举行钩子的判断,若是知足以下几个条件,if条件判断语句中的三个表达式依次执行,设置好当前DOM米素value属性值:

  • 钩子之中存在type属性 或者 存在与当前DOM米素节点同名的属性
  • 钩子之中存在set属性
  • 挪用set,获得的返回值不为undefined

3.否则,直接设置val为当前米素的value属性值


泉源:https://www.cnblogs.com/peterzhangsnail/archive/2018/12/02/10054533.html


思源资源网:分类流动

1.阿里云: 本站现在使用的是阿里云主机,平安/可靠/稳固。点击领取2000米代金券、领会最新阿里云产物的种种优惠流动点击进入

返回列表

上一篇:RemoveBG

下一篇:progress.js

相关文章

黑客闯关游戏(黑客闯关游戏推荐)

黑客闯关游戏(黑客闯关游戏推荐)

比特漫步最近内测的手游 1、霓虹深渊无限游戏介绍:《霓虹深渊:无限》是一款注重道具叠加效果的横版动作地牢游戏,你可以根据喜好自由选择地牢的进化路线。2、脑力大爆炸手游介绍脑力大爆炸是一款运用策略智慧进...

微信和飞书掐架,绝不是抢用户这么简单

微信和飞书掐架,绝不是抢用户这么简单

不巧言中,只能说各个社交大佬开始真正触及到用户价值背后最敏感的软肉。 1. 事情是这样的:微信把飞书禁了,疑拉取微信用户「关系链」 2 月 29 日,字节跳动旗下办公套件飞书发布官方公告称,飞书相关...

退休老教师在高铁站嘱托入伍新兵说了什么?具体详情曝光令人感动

9月10日,郑州,高铁站内一名头发花白的退休老教师遇到了入伍新兵。老师情绪激动,嘱托新兵们,希望他们多多关照自己,保护好自己,保护好人民,保护好我们的国家。并敬礼向新兵们致敬,在场新兵也敬礼回敬老师。...

多喜爱是做什么的(多喜爱的产品定位是什么)

多喜爱(下称“公司”,002761.SZ)是一家家用纺织品企业,主要从事以套件类产品(含枕套、被套、床单、床笠等)、芯类产品(含枕芯、被芯)为主的家纺用品的研发设计、委托加工的组织、品牌推广、渠道建设...

如何和老婆的微信同步 如何让老婆手机微信与自己手机同步接收

相信使用微信和QQ的合作伙伴应该知道这两款软件都是由腾讯推出的。微信可以登录和使用其他软件。现在有些用户想知道如何使用这个软件来查询QQ登录记录。让我们一起快速搜索。 同步接收微信 如何和老婆的微...

黑客能赚到1个亿吗(怎么能联系到黑客)-怎么成为手机黑客软件

黑客能赚到1个亿吗(怎么能联系到黑客)-怎么成为手机黑客软件

黑客能赚到1个亿吗(怎么能联系到黑客)(tiechemo.com)一直致力于黑客(HACK)技术、黑客QQ群、信息安全、web安全、渗透运维、黑客工具、找黑客、黑客联系方式、24小时在线网络黑客、黑客...