From 6d88e64330e16112e11725758d039b4c8cb7e3f2 Mon Sep 17 00:00:00 2001 From: "florian.benz" Date: Tue, 4 Feb 2014 11:16:10 +0100 Subject: [PATCH] feat(jqLite): IE7 support for adding/removing CSS classes With this change most of Angular's features work again in IE7. As IE7 and below are not tested, there is no guarantee what works and what not. Other browsers are not affected by the changes. See #4562, #4880 --- src/jqLite.js | 60 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/src/jqLite.js b/src/jqLite.js index e59805147886..7bdbc07bdce5 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -299,30 +299,52 @@ function jqLiteHasClass(element, selector) { } function jqLiteRemoveClass(element, cssClasses) { - if (cssClasses && element.setAttribute) { - forEach(cssClasses.split(' '), function(cssClass) { - element.setAttribute('class', trim( - (" " + (element.getAttribute('class') || '') + " ") - .replace(/[\n\t]/g, " ") - .replace(" " + trim(cssClass) + " ", " ")) - ); - }); + if (msie && msie < 8) { + if (cssClasses) { + forEach(cssClasses.split(' '), function(cssClass) { + element.className = trim( + (" " + element.className + " ") + .replace(/[\n\t]/g, " ") + .replace(" " + trim(cssClass) + " ", " ") + ); + }); + } + } else { + if (cssClasses && element.setAttribute) { + forEach(cssClasses.split(' '), function(cssClass) { + element.setAttribute('class', trim( + (" " + (element.getAttribute('class') || '') + " ") + .replace(/[\n\t]/g, " ") + .replace(" " + trim(cssClass) + " ", " ")) + ); + }); + } } } function jqLiteAddClass(element, cssClasses) { - if (cssClasses && element.setAttribute) { - var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ') - .replace(/[\n\t]/g, " "); - - forEach(cssClasses.split(' '), function(cssClass) { - cssClass = trim(cssClass); - if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) { - existingClasses += cssClass + ' '; - } - }); + if (msie && msie < 8) { + if (cssClasses) { + forEach(cssClasses.split(' '), function(cssClass) { + if (!jqLiteHasClass(element, cssClass)) { + element.className = trim(element.className + ' ' + trim(cssClass)); + } + }); + } + } else { + if (cssClasses && element.setAttribute) { + var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ') + .replace(/[\n\t]/g, " "); + + forEach(cssClasses.split(' '), function(cssClass) { + cssClass = trim(cssClass); + if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) { + existingClasses += cssClass + ' '; + } + }); - element.setAttribute('class', trim(existingClasses)); + element.setAttribute('class', trim(existingClasses)); + } } }