From 088661186351eeaaaf80230bcd522dd6c9c22c38 Mon Sep 17 00:00:00 2001 From: Wesley Cho Date: Tue, 7 Jan 2014 12:35:37 -0500 Subject: [PATCH 1/9] #5001: Fixes jqLite not appropriately adding and removing classes for IE9 --- src/jqLite.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/jqLite.js b/src/jqLite.js index e59805147886..05359ebb0368 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -299,9 +299,10 @@ function jqLiteHasClass(element, selector) { } function jqLiteRemoveClass(element, cssClasses) { + var classAttr = (msie !== 9) ? 'setAttribute' : 'className'; if (cssClasses && element.setAttribute) { forEach(cssClasses.split(' '), function(cssClass) { - element.setAttribute('class', trim( + element[classAttr]('class', trim( (" " + (element.getAttribute('class') || '') + " ") .replace(/[\n\t]/g, " ") .replace(" " + trim(cssClass) + " ", " ")) @@ -322,7 +323,8 @@ function jqLiteAddClass(element, cssClasses) { } }); - element.setAttribute('class', trim(existingClasses)); + (msie !== 9) ? element.setAttribute('class', trim(existingClasses)) : + element.className = trim(existingClasses); } } From c3b453125c9b03fc7c551e09c65a35c7bf0c6ba0 Mon Sep 17 00:00:00 2001 From: Wesley Cho Date: Wed, 8 Jan 2014 10:38:59 -0500 Subject: [PATCH 2/9] Fixed bad logic in jqLiteRemoveClass, added SVG check in jqLiteAddClass --- src/jqLite.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/jqLite.js b/src/jqLite.js index 05359ebb0368..5394eaabca29 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -299,16 +299,24 @@ function jqLiteHasClass(element, selector) { } function jqLiteRemoveClass(element, cssClasses) { - var classAttr = (msie !== 9) ? 'setAttribute' : 'className'; if (cssClasses && element.setAttribute) { forEach(cssClasses.split(' '), function(cssClass) { - element[classAttr]('class', trim( + element.setAttribute('class', trim( (" " + (element.getAttribute('class') || '') + " ") .replace(/[\n\t]/g, " ") .replace(" " + trim(cssClass) + " ", " ")) ); }); } + else { + forEach(cssClasses.split(' '), function(cssClass) { + element.className = trim( + (" " + (element.getAttribute('class') || '') + " ") + .replace(/[\n\t]/g, " ") + .replace(" " + trim(cssClass) + " ", " ") + ); + }); + } } function jqLiteAddClass(element, cssClasses) { @@ -323,8 +331,8 @@ function jqLiteAddClass(element, cssClasses) { } }); - (msie !== 9) ? element.setAttribute('class', trim(existingClasses)) : - element.className = trim(existingClasses); + (msie === 9 && !(element instanceof SVGElement)) ? element.className = trim(existingClasses) : + element.setAttribute('class', trim(existingClasses)); } } From 9878f54bcb0adf0a6b4d2edaa702a0a2bb9986bc Mon Sep 17 00:00:00 2001 From: Wesley Cho Date: Wed, 8 Jan 2014 11:03:58 -0500 Subject: [PATCH 3/9] Added dummy space --- test/jqLiteSpec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jqLiteSpec.js b/test/jqLiteSpec.js index 931f9b2e5cb3..a0fdaf77a77e 100644 --- a/test/jqLiteSpec.js +++ b/test/jqLiteSpec.js @@ -479,7 +479,7 @@ describe('jqLite', function() { it('should return undefined for non-existing attributes', function() { var elm = jqLite('
a
'); expect(elm.attr('non-existing')).toBeUndefined(); - }); + }); it('should return undefined for non-existing attributes on input', function() { var elm = jqLite(''); From 796d9256e9469c3598ca24dc6134a1d757d2876c Mon Sep 17 00:00:00 2001 From: Wesley Cho Date: Wed, 8 Jan 2014 11:04:16 -0500 Subject: [PATCH 4/9] Removed dummy space --- test/jqLiteSpec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jqLiteSpec.js b/test/jqLiteSpec.js index a0fdaf77a77e..931f9b2e5cb3 100644 --- a/test/jqLiteSpec.js +++ b/test/jqLiteSpec.js @@ -479,7 +479,7 @@ describe('jqLite', function() { it('should return undefined for non-existing attributes', function() { var elm = jqLite('
a
'); expect(elm.attr('non-existing')).toBeUndefined(); - }); + }); it('should return undefined for non-existing attributes on input', function() { var elm = jqLite(''); From 3f04e8feeb1be50902b7811b00653cdeb2a366d1 Mon Sep 17 00:00:00 2001 From: Wesley Cho Date: Wed, 8 Jan 2014 11:34:15 -0500 Subject: [PATCH 5/9] Proposed fix for getting class name in IE9 --- src/jqLite.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/jqLite.js b/src/jqLite.js index 5394eaabca29..e01de4019ba3 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -308,10 +308,10 @@ function jqLiteRemoveClass(element, cssClasses) { ); }); } - else { + else if (msie === 9) { forEach(cssClasses.split(' '), function(cssClass) { element.className = trim( - (" " + (element.getAttribute('class') || '') + " ") + (" " + (element.className || '') + " ") .replace(/[\n\t]/g, " ") .replace(" " + trim(cssClass) + " ", " ") ); @@ -321,7 +321,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) { From 33ec2012cd5d940c4a2d8aa3a50e0f205ede86c7 Mon Sep 17 00:00:00 2001 From: Wesley Cho Date: Wed, 8 Jan 2014 11:43:12 -0500 Subject: [PATCH 6/9] Added logic for jqLiteHasClass --- src/jqLite.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jqLite.js b/src/jqLite.js index e01de4019ba3..4c680edfb93d 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -294,7 +294,7 @@ function jqLiteData(element, key, value) { function jqLiteHasClass(element, selector) { if (!element.getAttribute) return false; - return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " "). + return ((" " + (element.getAttribute('class') || element.className || '') + " ").replace(/[\n\t]/g, " "). indexOf( " " + selector + " " ) > -1); } From 523efeaccd65c6388eb98f15c22ca5aa2b2ee80f Mon Sep 17 00:00:00 2001 From: Wesley Cho Date: Wed, 8 Jan 2014 11:44:20 -0500 Subject: [PATCH 7/9] loosened condition --- src/jqLite.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/jqLite.js b/src/jqLite.js index 4c680edfb93d..f25d7a61175f 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -308,7 +308,7 @@ function jqLiteRemoveClass(element, cssClasses) { ); }); } - else if (msie === 9) { + else if (msie) { forEach(cssClasses.split(' '), function(cssClass) { element.className = trim( (" " + (element.className || '') + " ") @@ -331,7 +331,7 @@ function jqLiteAddClass(element, cssClasses) { } }); - (msie === 9 && !(element instanceof SVGElement)) ? element.className = trim(existingClasses) : + (msie && !(element instanceof SVGElement)) ? element.className = trim(existingClasses) : element.setAttribute('class', trim(existingClasses)); } } From 4c69172cf0d8c884c10e517bec94fe53f762e2ee Mon Sep 17 00:00:00 2001 From: Wesley Cho Date: Wed, 8 Jan 2014 11:47:26 -0500 Subject: [PATCH 8/9] Removed excessive check --- src/jqLite.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jqLite.js b/src/jqLite.js index f25d7a61175f..bb07d53ee860 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -294,7 +294,7 @@ function jqLiteData(element, key, value) { function jqLiteHasClass(element, selector) { if (!element.getAttribute) return false; - return ((" " + (element.getAttribute('class') || element.className || '') + " ").replace(/[\n\t]/g, " "). + return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " "). indexOf( " " + selector + " " ) > -1); } From bce2debceb688d6951bf572bdd0ce4e850f07be4 Mon Sep 17 00:00:00 2001 From: Wesley Cho Date: Wed, 8 Jan 2014 12:09:29 -0500 Subject: [PATCH 9/9] Made condition strict again --- src/jqLite.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/jqLite.js b/src/jqLite.js index bb07d53ee860..e01de4019ba3 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -308,7 +308,7 @@ function jqLiteRemoveClass(element, cssClasses) { ); }); } - else if (msie) { + else if (msie === 9) { forEach(cssClasses.split(' '), function(cssClass) { element.className = trim( (" " + (element.className || '') + " ") @@ -331,7 +331,7 @@ function jqLiteAddClass(element, cssClasses) { } }); - (msie && !(element instanceof SVGElement)) ? element.className = trim(existingClasses) : + (msie === 9 && !(element instanceof SVGElement)) ? element.className = trim(existingClasses) : element.setAttribute('class', trim(existingClasses)); } }