jQuery prop() 源码解读

技术分享

    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 ) {
            // 属性中的for与class涉及到保留字,所以通过propFix分别对应到htmlFor和className
            // propFix: {
            //     "for": "htmlFor",
            //     "class": "className"
            // }
            name = jQuery.propFix[ name ] || name;
            // propHooks: {
            //     tabIndex: {
            //         get: function( elem ) {
            //             return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ?
            //                 elem.tabIndex :
            //                 -1;
            //         }
            //     }
            // }
            //hasAttribute IE9+
            //rfocusable 用于检测可以处于焦点的表单元素正则
            hooks = jQuery.propHooks[ name ];
        }

        if ( value !== undefined ) {//赋值
            return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
                ret :
                ( elem[ name ] = value );

        } else {//取值
            return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
                ret :
                elem[ name ];
        }
    }

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。