Fixes #7328. When getting data- attributes, after-cap any embedded dashes per the W3C HTML5 spec.
This commit is contained in:
parent
8c40c00fac
commit
8c318bf414
12
src/data.js
12
src/data.js
|
@ -1,6 +1,7 @@
|
||||||
(function( jQuery ) {
|
(function( jQuery ) {
|
||||||
|
|
||||||
var rbrace = /^(?:\{.*\}|\[.*\])$/;
|
var rbrace = /^(?:\{.*\}|\[.*\])$/,
|
||||||
|
rmultiDash = /([a-z])([A-Z])/g;
|
||||||
|
|
||||||
jQuery.extend({
|
jQuery.extend({
|
||||||
cache: {},
|
cache: {},
|
||||||
|
@ -223,12 +224,13 @@ jQuery.fn.extend({
|
||||||
data = jQuery.data( this[0] );
|
data = jQuery.data( this[0] );
|
||||||
|
|
||||||
if ( this[0].nodeType === 1 ) {
|
if ( this[0].nodeType === 1 ) {
|
||||||
var attr = this[0].attributes, name;
|
var attr = this[0].attributes, name;
|
||||||
for ( var i = 0, l = attr.length; i < l; i++ ) {
|
for ( var i = 0, l = attr.length; i < l; i++ ) {
|
||||||
name = attr[i].name;
|
name = attr[i].name;
|
||||||
|
|
||||||
if ( name.indexOf( "data-" ) === 0 ) {
|
if ( name.indexOf( "data-" ) === 0 ) {
|
||||||
name = name.substr( 5 );
|
name = jQuery.camelCase( name.substring(5) );
|
||||||
|
|
||||||
dataAttr( this[0], name, data[ name ] );
|
dataAttr( this[0], name, data[ name ] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -282,7 +284,9 @@ function dataAttr( elem, key, data ) {
|
||||||
// If nothing was found internally, try to fetch any
|
// If nothing was found internally, try to fetch any
|
||||||
// data from the HTML5 data-* attribute
|
// data from the HTML5 data-* attribute
|
||||||
if ( data === undefined && elem.nodeType === 1 ) {
|
if ( data === undefined && elem.nodeType === 1 ) {
|
||||||
data = elem.getAttribute( "data-" + key );
|
name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase();
|
||||||
|
|
||||||
|
data = elem.getAttribute( name );
|
||||||
|
|
||||||
if ( typeof data === "string" ) {
|
if ( typeof data === "string" ) {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -486,3 +486,20 @@ if (window.JSON && window.JSON.stringify) {
|
||||||
equals( JSON.stringify(obj), '{"foo":"bar"}', "Expando is hidden from JSON.stringify" );
|
equals( JSON.stringify(obj), '{"foo":"bar"}', "Expando is hidden from JSON.stringify" );
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test("jQuery.data should follow html5 specification regarding camel casing", function() {
|
||||||
|
expect(6);
|
||||||
|
|
||||||
|
var div = jQuery("<div id='myObject' data-foo='a' data-foo-bar='b' data-foo-bar-baz='c'></div>")
|
||||||
|
.prependTo("body");
|
||||||
|
|
||||||
|
equals(div.data().foo, "a", "Verify single word data-* key");
|
||||||
|
equals(div.data().fooBar, "b", "Verify multiple word data-* key");
|
||||||
|
equals(div.data().fooBarBaz, "c", "Verify multiple word data-* key");
|
||||||
|
|
||||||
|
equals(div.data("foo"), "a", "Verify single word data-* key");
|
||||||
|
equals(div.data("fooBar"), "b", "Verify multiple word data-* key");
|
||||||
|
equals(div.data("fooBarBaz"), "c", "Verify multiple word data-* key");
|
||||||
|
|
||||||
|
div.remove();
|
||||||
|
});
|
Loading…
Reference in a new issue