@@ -135,7 +135,23 @@ jQuery.extend({
135
135
jQuery . fn . extend ( {
136
136
data : function ( key , value ) {
137
137
if ( typeof key === "undefined" ) {
138
- return this . length ? jQuery . data ( this [ 0 ] ) : null ;
138
+ var data = null ;
139
+
140
+ if ( this . length ) {
141
+ var attr = this [ 0 ] . attributes , name ;
142
+ data = jQuery . data ( this [ 0 ] ) ;
143
+
144
+ for ( var i = 0 , l = attr . length ; i < l ; i ++ ) {
145
+ name = attr [ i ] . name ;
146
+
147
+ if ( name . indexOf ( "data-" ) === 0 ) {
148
+ name = name . substr ( 5 ) ;
149
+ dataAttr ( this [ 0 ] , name , data [ name ] ) ;
150
+ }
151
+ }
152
+ }
153
+
154
+ return data ;
139
155
140
156
} else if ( typeof key === "object" ) {
141
157
return this . each ( function ( ) {
@@ -152,26 +168,7 @@ jQuery.fn.extend({
152
168
// Try to fetch any internally stored data first
153
169
if ( data === undefined && this . length ) {
154
170
data = jQuery . data ( this [ 0 ] , key ) ;
155
-
156
- // If nothing was found internally, try to fetch any
157
- // data from the HTML5 data-* attribute
158
- if ( data === undefined && this [ 0 ] . nodeType === 1 ) {
159
- data = this [ 0 ] . getAttribute ( "data-" + key ) ;
160
-
161
- if ( typeof data === "string" ) {
162
- try {
163
- data = data === "true" ? true :
164
- data === "false" ? false :
165
- data === "null" ? null :
166
- ! jQuery . isNaN ( data ) ? parseFloat ( data ) :
167
- rbrace . test ( data ) ? jQuery . parseJSON ( data ) :
168
- data ;
169
- } catch ( e ) { }
170
-
171
- } else {
172
- data = undefined ;
173
- }
174
- }
171
+ data = dataAttr ( this [ 0 ] , key , data ) ;
175
172
}
176
173
177
174
return data === undefined && parts [ 1 ] ?
@@ -196,4 +193,31 @@ jQuery.fn.extend({
196
193
}
197
194
} ) ;
198
195
196
+ function dataAttr ( elem , key , data ) {
197
+ // If nothing was found internally, try to fetch any
198
+ // data from the HTML5 data-* attribute
199
+ if ( data === undefined && elem . nodeType === 1 ) {
200
+ data = elem . getAttribute ( "data-" + key ) ;
201
+
202
+ if ( typeof data === "string" ) {
203
+ try {
204
+ data = data === "true" ? true :
205
+ data === "false" ? false :
206
+ data === "null" ? null :
207
+ ! jQuery . isNaN ( data ) ? parseFloat ( data ) :
208
+ rbrace . test ( data ) ? jQuery . parseJSON ( data ) :
209
+ data ;
210
+ } catch ( e ) { }
211
+
212
+ // Make sure we set the data so it isn't changed later
213
+ jQuery . data ( elem , key , data ) ;
214
+
215
+ } else {
216
+ data = undefined ;
217
+ }
218
+ }
219
+
220
+ return data ;
221
+ }
222
+
199
223
} ) ( jQuery ) ;
0 commit comments