11define ( [
22 "../core" ,
3- "../var/rnotwhite" ,
43 "../core/access" ,
54 "./support" ,
6- "./val " ,
5+ "../var/rnotwhite " ,
76 "../selector"
8- ] , function ( jQuery , rnotwhite , access , support ) {
7+ ] , function ( jQuery , access , support , rnotwhite ) {
98
109var boolHook ,
11- attrHandle = jQuery . expr . attrHandle ,
12- ruseDefault = / ^ (?: c h e c k e d | s e l e c t e d ) $ / i,
13- getSetInput = support . input ;
10+ attrHandle = jQuery . expr . attrHandle ;
1411
1512jQuery . fn . extend ( {
1613 attr : function ( name , value ) {
@@ -26,10 +23,10 @@ jQuery.fn.extend({
2623
2724jQuery . extend ( {
2825 attr : function ( elem , name , value ) {
29- var hooks , ret ,
26+ var ret , hooks ,
3027 nType = elem . nodeType ;
3128
32- // don 't get/set attributes on text, comment and attribute nodes
29+ // Don 't get/set attributes on text, comment and attribute nodes
3330 if ( nType === 3 || nType === 8 || nType === 2 ) {
3431 return ;
3532 }
@@ -48,30 +45,43 @@ jQuery.extend({
4845 }
4946
5047 if ( value !== undefined ) {
51-
5248 if ( value === null ) {
5349 jQuery . removeAttr ( elem , name ) ;
50+ return ;
51+ }
5452
55- } else if ( hooks && "set" in hooks &&
56- ( ret = hooks . set ( elem , value , name ) ) !== undefined ) {
57-
53+ if ( hooks && "set" in hooks &&
54+ ( ret = hooks . set ( elem , value , name ) ) !== undefined ) {
5855 return ret ;
59-
60- } else {
61- elem . setAttribute ( name , value + "" ) ;
62- return value ;
6356 }
6457
65- } else if ( hooks && "get" in hooks && ( ret = hooks . get ( elem , name ) ) !== null ) {
58+ elem . setAttribute ( name , value + "" ) ;
59+ return value ;
60+ }
61+
62+ if ( hooks && "get" in hooks && ( ret = hooks . get ( elem , name ) ) !== null ) {
6663 return ret ;
64+ }
6765
68- } else {
69- ret = jQuery . find . attr ( elem , name ) ;
66+ ret = jQuery . find . attr ( elem , name ) ;
7067
71- // Non-existent attributes return null, we normalize to undefined
72- return ret == null ?
73- undefined :
74- ret ;
68+ // Non-existent attributes return null, we normalize to undefined
69+ return ret == null ? undefined : ret ;
70+ } ,
71+
72+ attrHooks : {
73+ type : {
74+ set : function ( elem , value ) {
75+ if ( ! support . radioValue && value === "radio" &&
76+ jQuery . nodeName ( elem , "input" ) ) {
77+ var val = elem . value ;
78+ elem . setAttribute ( "type" , value ) ;
79+ if ( val ) {
80+ elem . value = val ;
81+ }
82+ return value ;
83+ }
84+ }
7585 }
7686 } ,
7787
@@ -81,116 +91,50 @@ jQuery.extend({
8191 attrNames = value && value . match ( rnotwhite ) ;
8292
8393 if ( attrNames && elem . nodeType === 1 ) {
84- while ( ( name = attrNames [ i ++ ] ) ) {
94+ while ( ( name = attrNames [ i ++ ] ) ) {
8595 propName = jQuery . propFix [ name ] || name ;
8696
8797 // Boolean attributes get special treatment (#10870)
8898 if ( jQuery . expr . match . bool . test ( name ) ) {
99+
89100 // Set corresponding property to false
90- if ( getSetInput || ! ruseDefault . test ( name ) ) {
91- elem [ propName ] = false ;
92- // Support: IE<9
93- // Also clear defaultChecked/defaultSelected (if appropriate)
94- } else {
95- elem [ jQuery . camelCase ( "default-" + name ) ] =
96- elem [ propName ] = false ;
97- }
101+ elem [ propName ] = false ;
98102 }
99103
100104 elem . removeAttribute ( name ) ;
101105 }
102106 }
103- } ,
104-
105- attrHooks : {
106- type : {
107- set : function ( elem , value ) {
108- if ( ! support . radioValue && value === "radio" && jQuery . nodeName ( elem , "input" ) ) {
109- // Setting the type on a radio button after the value resets the value in IE8-9
110- // Reset value to default in case type is set after value during creation
111- var val = elem . value ;
112- elem . setAttribute ( "type" , value ) ;
113- if ( val ) {
114- elem . value = val ;
115- }
116- return value ;
117- }
118- }
119- }
120107 }
121108} ) ;
122109
123- // Hook for boolean attributes
110+ // Hooks for boolean attributes
124111boolHook = {
125112 set : function ( elem , value , name ) {
126113 if ( value === false ) {
127114 // Remove boolean attributes when set to false
128115 jQuery . removeAttr ( elem , name ) ;
129- } else if ( getSetInput || ! ruseDefault . test ( name ) ) {
130- elem . setAttribute ( jQuery . propFix [ name ] || name , name ) ;
131-
132116 } else {
133- // Support: IE<9
134- // Use defaultChecked and defaultSelected for oldIE
135- elem [ jQuery . camelCase ( "default-" + name ) ] = elem [ name ] = true ;
117+ elem . setAttribute ( name , name ) ;
136118 }
137-
138119 return name ;
139120 }
140121} ;
141-
142- // Retrieve booleans specially
143122jQuery . each ( jQuery . expr . match . bool . source . match ( / \w + / g ) , function ( i , name ) {
144-
145123 var getter = attrHandle [ name ] || jQuery . find . attr ;
146124
147- attrHandle [ name ] = getSetInput || ! ruseDefault . test ( name ) ?
148- function ( elem , name , isXML ) {
149- var ret , handle ;
150- if ( ! isXML ) {
151- // Avoid an infinite loop by temporarily removing this function from the getter
152- handle = attrHandle [ name ] ;
153- attrHandle [ name ] = ret ;
154- ret = getter ( elem , name , isXML ) != null ?
155- name . toLowerCase ( ) :
156- null ;
157- attrHandle [ name ] = handle ;
158- }
159- return ret ;
160- } :
161- function ( elem , name , isXML ) {
162- if ( ! isXML ) {
163- return elem [ jQuery . camelCase ( "default-" + name ) ] ?
164- name . toLowerCase ( ) :
165- null ;
166- }
167- } ;
168- } ) ;
169-
170- // fix oldIE attroperties
171- if ( ! getSetInput ) {
172- jQuery . attrHooks . value = {
173- set : function ( elem , value ) {
174- if ( jQuery . nodeName ( elem , "input" ) ) {
175- // Does not return so that setAttribute is also used
176- elem . defaultValue = value ;
177- }
125+ attrHandle [ name ] = function ( elem , name , isXML ) {
126+ var ret , handle ;
127+ if ( ! isXML ) {
128+ // Avoid an infinite loop by temporarily removing this function from the getter
129+ handle = attrHandle [ name ] ;
130+ attrHandle [ name ] = ret ;
131+ ret = getter ( elem , name , isXML ) != null ?
132+ name . toLowerCase ( ) :
133+ null ;
134+ attrHandle [ name ] = handle ;
178135 }
136+ return ret ;
179137 } ;
180- }
181-
182- if ( ! support . style ) {
183- jQuery . attrHooks . style = {
184- get : function ( elem ) {
185- // Return undefined in the case of empty string
186- // Note: IE uppercases css property names, but if we were to .toLowerCase()
187- // .cssText, that would destroy case senstitivity in URL's, like in "background"
188- return elem . style . cssText || undefined ;
189- } ,
190- set : function ( elem , value ) {
191- return ( elem . style . cssText = value + "" ) ;
192- }
193- } ;
194- }
138+ } ) ;
195139
196140} ) ;
0 commit comments