標籤:
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 ]; } }
jQuery prop() 源碼解讀