Ticket #2548: attr.diff
| File attr.diff, 3.4 kB (added by flesler, 10 months ago) |
|---|
-
src/core.js
174 174 // Look for the case where we're accessing a style value 175 175 if ( name.constructor == String ) 176 176 if ( value == undefined ) 177 return this .length && jQuery[ type || "attr" ]( this[0], name ) || undefined;177 return this[0] && jQuery[ type || "attr" ]( this[0], name ); 178 178 179 179 else { 180 180 options = {}; … … 1042 1042 attr: function( elem, name, value ) { 1043 1043 // don't set attributes on text and comment nodes 1044 1044 if (!elem || elem.nodeType == 3 || elem.nodeType == 8) 1045 return undefined;1045 return; 1046 1046 1047 1047 var fix = jQuery.isXMLDoc( elem ) ? 1048 1048 {} : 1049 jQuery.props; 1049 jQuery.props, 1050 get = value != undefined,//whether we are getting (or setting) 1051 special = /href|src/.test( name );//these attributes need special treatment 1050 1052 1051 1053 // Safari mis-reports the default selected property of a hidden option 1052 1054 // Accessing the parent's selectedIndex property fixes it … … 1054 1056 elem.parentNode.selectedIndex; 1055 1057 1056 1058 // Certain attributes only work when accessed via the old DOM 0 way 1057 if ( fix[ name ]) {1058 if ( value != undefined)1059 elem[ fix[ name ] ] = value;1059 if ( !special && ( fix[ name ] || name in elem ) ) { 1060 if ( get ) 1061 elem[ fix[ name ] || name ] = value; 1060 1062 1061 return elem[ fix[ name ] ];1063 return elem[ fix[ name ] || name ]; 1062 1064 1063 1065 } else if ( jQuery.browser.msie && name == "style" ) 1064 1066 return jQuery.attr( elem.style, "cssText", value ); 1065 1067 1066 else if ( value == undefined&& jQuery.browser.msie && jQuery.nodeName( elem, "form" ) && (name == "action" || name == "method") )1068 else if ( get && jQuery.browser.msie && jQuery.nodeName( elem, "form" ) && (name == "action" || name == "method") ) 1067 1069 return elem.getAttributeNode( name ).nodeValue; 1068 1070 1069 1071 // IE elem.getAttribute passes even for style 1070 1072 else if ( elem.tagName ) { 1071 1073 1072 if ( value != undefined) {1074 if ( get ) { 1073 1075 // We can't allow the type property to be changed (since it causes problems in IE) 1074 1076 if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode ) 1075 1077 throw "type property can't be changed"; … … 1078 1080 elem.setAttribute( name, "" + value ); 1079 1081 } 1080 1082 1081 if ( jQuery.browser.msie && /href|src/.test( name )&& !jQuery.isXMLDoc( elem ) )1083 if ( jQuery.browser.msie && special && !jQuery.isXMLDoc( elem ) ) 1082 1084 return elem.getAttribute( name, 2 ); 1083 1085 1084 1086 return elem.getAttribute( name ); … … 1087 1089 } else { 1088 1090 // IE actually uses filters for opacity 1089 1091 if ( name == "opacity" && jQuery.browser.msie ) { 1090 if ( value != undefined) {1092 if ( get ) { 1091 1093 // IE has trouble with opacity if it does not have layout 1092 1094 // Force it by setting the zoom level 1093 1095 elem.zoom = 1; … … 1106 1108 return letter.toUpperCase(); 1107 1109 }); 1108 1110 1109 if ( value != undefined)1111 if ( get ) 1110 1112 elem[ name ] = value; 1111 1113 1112 1114 return elem[ name ]; … … 1234 1236 "float": styleFloat, 1235 1237 cssFloat: styleFloat, 1236 1238 styleFloat: styleFloat, 1237 innerHTML: "innerHTML",1238 className: "className",1239 value: "value",1240 disabled: "disabled",1241 checked: "checked",1242 1239 readonly: "readOnly", 1243 selected: "selected", 1244 maxlength: "maxLength", 1245 selectedIndex: "selectedIndex", 1246 defaultValue: "defaultValue", 1247 tagName: "tagName", 1248 nodeName: "nodeName" 1240 maxlength: "maxLength" 1249 1241 } 1250 1242 }); 1251 1243
