From d8576139c14fb777c24867d7f72d70d7334aabd1 Mon Sep 17 00:00:00 2001 From: Richard Gibson Date: Mon, 28 Oct 2013 11:35:53 -0400 Subject: [PATCH] Fix #14459: Use jQuery.parseJSON instead of JSON.parse (cherry picked from commit ced9d155f010bc456745a55a63ca959db9d405d3) --- src/data.js | 2 +- test/unit/data.js | 14 ++------------ 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/src/data.js b/src/data.js index 16dd4276a..248a5df50 100644 --- a/src/data.js +++ b/src/data.js @@ -25,7 +25,7 @@ function dataAttr( elem, key, data ) { // Only convert to a number if it doesn't change the string +data + "" === data ? +data : rbrace.test( data ) ? jQuery.parseJSON( data ) : - data; + data; } catch( e ) {} // Make sure we set the data so it isn't changed later diff --git a/test/unit/data.js b/test/unit/data.js index 9c9d54f39..1e857ae6e 100644 --- a/test/unit/data.js +++ b/test/unit/data.js @@ -244,7 +244,6 @@ test("data-* attributes", function() { var prop, i, l, metadata, elem, obj, obj2, check, num, num2, parseJSON = jQuery.parseJSON, - nativeParse = typeof JSON !== "undefined" && JSON.parse, div = jQuery("
"), child = jQuery("
"), dummy = jQuery("
"); @@ -301,17 +300,11 @@ test("data-* attributes", function() { equal( child.data("other"), "test", "Make sure value was pulled in properly from a .data()." ); // attribute parsing - i = l = 0; + i = 0; jQuery.parseJSON = function() { i++; return parseJSON.apply( this, arguments ); }; - if ( nativeParse ) { - JSON.parse = function() { - l++; - return nativeParse.apply( this, arguments ); - }; - } child .attr("data-true", "true") @@ -359,12 +352,9 @@ test("data-* attributes", function() { strictEqual( child.data("space"), " ", "Whitespace string read from attribute"); strictEqual( child.data("null"), null, "Primitive null read from attribute"); strictEqual( child.data("string"), "test", "Typical string read from attribute"); - equal( i || l, 2, "Correct number of JSON parse attempts when reading from attributes" ); + equal( i, 2, "Correct number of JSON parse attempts when reading from attributes" ); jQuery.parseJSON = parseJSON; - if ( nativeParse ) { - JSON.parse = nativeParse; - } child.remove(); // tests from metadata plugin