]> source.dussan.org Git - jquery.git/commitdiff
Landing pull request 503. 1.7 data: set a flag in the private data cache to avoid...
authorCorey Frang <gnarf@gnarf.net>
Mon, 19 Sep 2011 20:13:57 +0000 (16:13 -0400)
committertimmywil <timmywillisn@gmail.com>
Mon, 19 Sep 2011 20:13:57 +0000 (16:13 -0400)
More Details:
 - https://github.com/jquery/jquery/pull/503
 - http://bugs.jquery.com/ticket/8909

src/data.js
test/unit/data.js

index 9de0da1c543180152c8efdcd6ba3c4bde4e06d7f..1c6d1852c241a131dc77ae8570bf2e72ca5aba76 100644 (file)
@@ -231,14 +231,15 @@ jQuery.extend({
 
 jQuery.fn.extend({
        data: function( key, value ) {
-               var data = null;
+               var parts, attr, name,
+                       data = null;
 
                if ( typeof key === "undefined" ) {
                        if ( this.length ) {
                                data = jQuery.data( this[0] );
 
-                               if ( this[0].nodeType === 1 ) {
-                           var attr = this[0].attributes, name;
+                               if ( this[0].nodeType === 1 && !jQuery._data( this[0], "parsedAttrs" ) ) {
+                                       attr = this[0].attributes;
                                        for ( var i = 0, l = attr.length; i < l; i++ ) {
                                                name = attr[i].name;
 
@@ -248,6 +249,7 @@ jQuery.fn.extend({
                                                        dataAttr( this[0], name, data[ name ] );
                                                }
                                        }
+                                       jQuery._data( this[0], "parsedAttrs", true );
                                }
                        }
 
@@ -259,7 +261,7 @@ jQuery.fn.extend({
                        });
                }
 
-               var parts = key.split(".");
+               parts = key.split(".");
                parts[1] = parts[1] ? "." + parts[1] : "";
 
                if ( value === undefined ) {
index ebeb1b4ee940c259b7f1e9a00ca198afd238a545..4feba32c0d3c15d80c78dfa7be5c4b36e3a4ba1c 100644 (file)
@@ -599,3 +599,24 @@ test("Triggering the removeData should not throw exceptions. (#10080)", function
        // change the url to trigger unload
        frame.attr("src", "data/iframe.html?param=true");
 });
+
+test( "Only check element attributes once when calling .data() - #8909", function() {
+       expect( 2 );
+       var testing = {
+                       test: "testing",
+                       test2: "testing"
+               },
+               element = jQuery( "<div data-test='testing'>" ),
+               node = element[ 0 ];
+
+       // set an attribute using attr to ensure it
+       node.setAttribute( "data-test2", "testing" );
+       deepEqual( element.data(), testing, "Sanity Check" );
+
+       node.setAttribute( "data-test3", "testing" );
+       deepEqual( element.data(), testing, "The data didn't change even though the data-* attrs did" );
+
+       // clean up data cache
+       element.remove();
+
+});