javascript代码实例教程-jQuery prop和attr的区别

发布时间:2019-01-24 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-jQuery prop和attr的区别脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。 两者对比

 

jquery方法 原理 适合场景 缺陷

PRop 解析原生proPErty

element.property radio/checkbox 

select标签

等需要读boolean和索引的场合 读不到自定义属性

如<a my=&#39;I'/> my属性读不到

attr 通过Attr API去读取

element.getAttribute(propertyName) 除prop场景外 可能读不到boolean或一些索引值

如checked,selectedIndex

 

 

prop方法

 

  例子

 

    在控制台输入

 

document.getelementsbytagname('a')[0].href

    控制台输出

 

"https://www.baidu.COM/home/XMan/show/lITeoff"

     href就是标签a映射的DOM对象HTMLAnchorElement的原生属性。

 

      jQuery码      

 

复制代码

prop: function( elem, name, value ) {

        VAR ret, hooks, notxML,

            nType = elem.nodeType;

 

        // don't get/set properties on text, comment and attribute nodes

        if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {

            return;

        }

 

        notxml = nType !== 1 || !jQuery.isXMLDoc( elem );

 

        if ( notxml ) {

            // Fix name and attach hooks

            name = jQuery.propFix[ name ] || name;

            hooks = jQuery.propHooks[ name ];

        }

 

        if ( value !== undefined ) {

            if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {

                return ret;

 

            } else {

                return ( elem[ name ] = value );//这里就是读原生property

            }

 

        } else {

            if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {

                return ret;

 

            } else {

                return elem[ name ];

            }

        }

    }

复制代码

 

 

  

 

 attr方法

 

  例子

 

    在控制台输入

 

document.getElementsByTagName('a')[10].getAttribute('href')

   控制台输出

 

"https://www.hao123.com"

   getAttribute就是Attr类的查询API。其他还有删除、修改、增加。

 

     jQuery源码

 

 

attr: function( elem, name, value, pass ) {

        var ret, hooks, notxml,

            nType = elem.nodeType;

 

        // don't get/set attributes on text, comment and attribute nodes

        if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {

            return;

        }

 

        if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) {

            return jQuery( elem )[ name ]( value );

        }

 

        // Fallback to prop when attributes are not supported

        if ( typeof elem.getAttribute === "undefined" ) {

            return jQuery.prop( elem, name, value );

        }

 

        notxml = nType !== 1 || !jQuery.isXMLDoc( elem );

 

        // All attributes are lowercase

        // Grab necessary hook if one is defined

        if ( notxml ) {

            name = name.toLowerCase();

            hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );

        }

 

        if ( value !== undefined ) {

 

            if ( value === null ) {

                jQuery.removeAttr( elem, name );

                return;

 

            } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {

                return ret;

 

            } else {

                elem.setattribute( name, value + "" );

                return value;

            }

 

        } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {

            return ret;

 

        } else {

 

             ret = elem.getAttribute( name );//这里通过Attr API读取属性

 

            // Non-existent attributes return null, we normalize to undefined

            return ret === null ?

                undefined :

                ret;

        }

    }

  

觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的javascript代码实例教程-jQuery prop和attr的区别全部内容,希望文章能够帮你解决javascript代码实例教程-jQuery prop和attr的区别所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。