Skip to content
Permalink
Browse files

Fixes #7328. When getting data- attributes, after-cap any embedded da…

…shes per the W3C HTML5 spec.
  • Loading branch information...
alexisabril authored and dmethvin committed Apr 10, 2011
1 parent 8c40c00 commit 8c318bf41412d493604beed1879c4a273ff05a57
Showing with 26 additions and 5 deletions.
  1. +8 −4 src/data.js
  2. +18 −1 test/unit/data.js
@@ -1,6 +1,7 @@
(function( jQuery ) {

var rbrace = /^(?:\{.*\}|\[.*\])$/;
var rbrace = /^(?:\{.*\}|\[.*\])$/,
rmultiDash = /([a-z])([A-Z])/g;

jQuery.extend({
cache: {},
@@ -223,12 +224,13 @@ jQuery.fn.extend({
data = jQuery.data( this[0] );

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++ ) {
name = attr[i].name;

if ( name.indexOf( "data-" ) === 0 ) {
name = name.substr( 5 );
name = jQuery.camelCase( name.substring(5) );

dataAttr( this[0], name, data[ name ] );
}
}
@@ -282,7 +284,9 @@ function dataAttr( elem, key, data ) {
// If nothing was found internally, try to fetch any
// data from the HTML5 data-* attribute
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" ) {
try {
@@ -485,4 +485,21 @@ if (window.JSON && window.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();
});

0 comments on commit 8c318bf

Please sign in to comment.
You can’t perform that action at this time.