From b4259fda00fcfdc2debed745ea5125b5fe3f053a Mon Sep 17 00:00:00 2001 From: Wesley Cho Date: Wed, 8 Jan 2014 13:00:13 -0500 Subject: [PATCH 1/3] Fixed code style, added test Condensed logic, changed toEqual to toBe --- src/jqLite.js | 10 ++++++---- test/jqLiteSpec.js | 8 ++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/jqLite.js b/src/jqLite.js index 73b76f930739..b52c67f1022c 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -358,9 +358,10 @@ function jqLiteHasClass(element, selector) { } function jqLiteRemoveClass(element, cssClasses) { - if (cssClasses && element.setAttribute) { + var setter = element.setAttribute ? function(value) { element.setAttribute('class', value) } : function(value) { element.className = value}; + if (cssClasses && (element.setAttribute || msie === 9)) { forEach(cssClasses.split(' '), function(cssClass) { - element.setAttribute('class', trim( + setter(trim( (" " + (element.getAttribute('class') || '') + " ") .replace(/[\n\t]/g, " ") .replace(" " + trim(cssClass) + " ", " ")) @@ -371,7 +372,7 @@ function jqLiteRemoveClass(element, cssClasses) { function jqLiteAddClass(element, cssClasses) { if (cssClasses && element.setAttribute) { - var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ') + var existingClasses = (' ' + (element.getAttribute('class') || element.className || '') + ' ') .replace(/[\n\t]/g, " "); forEach(cssClasses.split(' '), function(cssClass) { @@ -381,7 +382,8 @@ function jqLiteAddClass(element, cssClasses) { } }); - element.setAttribute('class', trim(existingClasses)); + (msie === 9 && !(element instanceof SVGElement)) ? element.className = trim(existingClasses) : + element.setAttribute('class', trim(existingClasses)); } } diff --git a/test/jqLiteSpec.js b/test/jqLiteSpec.js index 3be21571f808..a2b64426f6af 100644 --- a/test/jqLiteSpec.js +++ b/test/jqLiteSpec.js @@ -713,6 +713,14 @@ describe('jqLite', function() { expect(jqLite(b).hasClass('abc')).toEqual(true); }); + it('should allow adding of class in IE9', function() { + if (msie !== 9) return; // IE9 doesn't support node.setAttribute + var selector = jqLite([a, b]); + expect(selector.addClass('abc')).toBe(selector); + expect(jqLite(a).hasClass('abc')).toBe(true); + expect(jqLite(b).hasClass('abc')).toBe(true); + }); + it('should ignore falsy values', function() { var jqA = jqLite(a); From ff77e1a14854eb57809fdedf676c849cebf7b5bd Mon Sep 17 00:00:00 2001 From: Wesley Cho Date: Thu, 9 Jan 2014 20:51:19 -0500 Subject: [PATCH 2/3] Fixed jshint errors --- src/jqLite.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jqLite.js b/src/jqLite.js index b52c67f1022c..cbc5638b6bd6 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -358,7 +358,7 @@ function jqLiteHasClass(element, selector) { } function jqLiteRemoveClass(element, cssClasses) { - var setter = element.setAttribute ? function(value) { element.setAttribute('class', value) } : function(value) { element.className = value}; + var setter = element.setAttribute ? function(value) { element.setAttribute('class', value); } : function(value) { element.className = value; }; if (cssClasses && (element.setAttribute || msie === 9)) { forEach(cssClasses.split(' '), function(cssClass) { setter(trim( From 9ea4b2494ab7ac38e05b7c10183bfc8c64dee06a Mon Sep 17 00:00:00 2001 From: Wesley Cho Date: Thu, 9 Jan 2014 21:30:15 -0500 Subject: [PATCH 3/3] Tweaked test, fixed error --- src/jqLite.js | 2 +- test/jqLiteSpec.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/jqLite.js b/src/jqLite.js index cbc5638b6bd6..032593c0bf5b 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -362,7 +362,7 @@ function jqLiteRemoveClass(element, cssClasses) { if (cssClasses && (element.setAttribute || msie === 9)) { forEach(cssClasses.split(' '), function(cssClass) { setter(trim( - (" " + (element.getAttribute('class') || '') + " ") + (" " + (element.getAttribute('class') || element.className || '') + " ") .replace(/[\n\t]/g, " ") .replace(" " + trim(cssClass) + " ", " ")) ); diff --git a/test/jqLiteSpec.js b/test/jqLiteSpec.js index a2b64426f6af..e51527089e8e 100644 --- a/test/jqLiteSpec.js +++ b/test/jqLiteSpec.js @@ -714,7 +714,7 @@ describe('jqLite', function() { }); it('should allow adding of class in IE9', function() { - if (msie !== 9) return; // IE9 doesn't support node.setAttribute + if (!(jqLite(a).setAttribute && jqLite(a).getAttribute)) return; // IE9 doesn't support node.setAttribute var selector = jqLite([a, b]); expect(selector.addClass('abc')).toBe(selector); expect(jqLite(a).hasClass('abc')).toBe(true);