1
1
define ( [
2
2
"../core" ,
3
- "../var/rnotwhite" ,
4
3
"../core/access" ,
5
4
"./support" ,
6
- "./val " ,
5
+ "../var/rnotwhite " ,
7
6
"../selector"
8
- ] , function ( jQuery , rnotwhite , access , support ) {
7
+ ] , function ( jQuery , access , support , rnotwhite ) {
9
8
10
9
var 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 ;
14
11
15
12
jQuery . fn . extend ( {
16
13
attr : function ( name , value ) {
@@ -26,10 +23,10 @@ jQuery.fn.extend({
26
23
27
24
jQuery . extend ( {
28
25
attr : function ( elem , name , value ) {
29
- var hooks , ret ,
26
+ var ret , hooks ,
30
27
nType = elem . nodeType ;
31
28
32
- // don 't get/set attributes on text, comment and attribute nodes
29
+ // Don 't get/set attributes on text, comment and attribute nodes
33
30
if ( nType === 3 || nType === 8 || nType === 2 ) {
34
31
return ;
35
32
}
@@ -48,30 +45,43 @@ jQuery.extend({
48
45
}
49
46
50
47
if ( value !== undefined ) {
51
-
52
48
if ( value === null ) {
53
49
jQuery . removeAttr ( elem , name ) ;
50
+ return ;
51
+ }
54
52
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 ) {
58
55
return ret ;
59
-
60
- } else {
61
- elem . setAttribute ( name , value + "" ) ;
62
- return value ;
63
56
}
64
57
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 ) {
66
63
return ret ;
64
+ }
67
65
68
- } else {
69
- ret = jQuery . find . attr ( elem , name ) ;
66
+ ret = jQuery . find . attr ( elem , name ) ;
70
67
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
+ }
75
85
}
76
86
} ,
77
87
@@ -81,116 +91,50 @@ jQuery.extend({
81
91
attrNames = value && value . match ( rnotwhite ) ;
82
92
83
93
if ( attrNames && elem . nodeType === 1 ) {
84
- while ( ( name = attrNames [ i ++ ] ) ) {
94
+ while ( ( name = attrNames [ i ++ ] ) ) {
85
95
propName = jQuery . propFix [ name ] || name ;
86
96
87
97
// Boolean attributes get special treatment (#10870)
88
98
if ( jQuery . expr . match . bool . test ( name ) ) {
99
+
89
100
// 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 ;
98
102
}
99
103
100
104
elem . removeAttribute ( name ) ;
101
105
}
102
106
}
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
- }
120
107
}
121
108
} ) ;
122
109
123
- // Hook for boolean attributes
110
+ // Hooks for boolean attributes
124
111
boolHook = {
125
112
set : function ( elem , value , name ) {
126
113
if ( value === false ) {
127
114
// Remove boolean attributes when set to false
128
115
jQuery . removeAttr ( elem , name ) ;
129
- } else if ( getSetInput || ! ruseDefault . test ( name ) ) {
130
- elem . setAttribute ( jQuery . propFix [ name ] || name , name ) ;
131
-
132
116
} 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 ) ;
136
118
}
137
-
138
119
return name ;
139
120
}
140
121
} ;
141
-
142
- // Retrieve booleans specially
143
122
jQuery . each ( jQuery . expr . match . bool . source . match ( / \w + / g ) , function ( i , name ) {
144
-
145
123
var getter = attrHandle [ name ] || jQuery . find . attr ;
146
124
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 ;
178
135
}
136
+ return ret ;
179
137
} ;
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
+ } ) ;
195
139
196
140
} ) ;
0 commit comments