jQuery prop() 与 removeProp()源码解读

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

 removeProp()

    removeProp: function( name ) {
        return this.each(function() {
            delete this[ jQuery.propFix[ name ] || name ];
        });
    }
原文地址:https://www.cnblogs.com/qianlegeqian/p/4224821.html