diff --git a/src/jqLite.js b/src/jqLite.js index 73b76f930739..032593c0bf5b 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -358,10 +358,11 @@ 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( - (" " + (element.getAttribute('class') || '') + " ") + setter(trim( + (" " + (element.getAttribute('class') || element.className || '') + " ") .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..e51527089e8e 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 (!(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); + expect(jqLite(b).hasClass('abc')).toBe(true); + }); + it('should ignore falsy values', function() { var jqA = jqLite(a);