aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVojta Jina2013-10-09 13:51:59 -0700
committerVojta Jina2013-10-09 15:19:10 -0700
commit64fd2c421ed582c16812d164a8a6f031b8e66287 (patch)
tree5b9ff25462dd4d6575b90e28288c0d14f2053b75
parentb6a37d112b3e1478f4d14a5f82faabf700443748 (diff)
downloadangular.js-64fd2c421ed582c16812d164a8a6f031b8e66287.tar.bz2
fix(jqLite): ignore class methods on comment elements
Since c785267e jqLite uses setAttribute (rather than className property) in order to change classes. Some elements (eg. Comment) do not have this method which blows up. jQuery silently ignores these method calls (because it uses className), so to get the same behavior as jQuery, we check for setAttribute method first.
-rw-r--r--src/jqLite.js5
-rw-r--r--test/jqLiteSpec.js10
2 files changed, 13 insertions, 2 deletions
diff --git a/src/jqLite.js b/src/jqLite.js
index 8660ce49..60c156e4 100644
--- a/src/jqLite.js
+++ b/src/jqLite.js
@@ -279,12 +279,13 @@ function JQLiteData(element, key, value) {
}
function JQLiteHasClass(element, selector) {
+ if (!element.getAttribute) return false;
return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " ").
indexOf( " " + selector + " " ) > -1);
}
function JQLiteRemoveClass(element, cssClasses) {
- if (cssClasses) {
+ if (cssClasses && element.setAttribute) {
forEach(cssClasses.split(' '), function(cssClass) {
element.setAttribute('class', trim(
(" " + (element.getAttribute('class') || '') + " ")
@@ -296,7 +297,7 @@ function JQLiteRemoveClass(element, cssClasses) {
}
function JQLiteAddClass(element, cssClasses) {
- if (cssClasses) {
+ if (cssClasses && element.setAttribute) {
var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ')
.replace(/[\n\t]/g, " ");
diff --git a/test/jqLiteSpec.js b/test/jqLiteSpec.js
index de9c74da..24920273 100644
--- a/test/jqLiteSpec.js
+++ b/test/jqLiteSpec.js
@@ -493,6 +493,16 @@ describe('jqLite', function() {
});
+ it('should ignore comment elements', function() {
+ var comment = jqLite(document.createComment('something'));
+
+ comment.addClass('whatever');
+ comment.hasClass('whatever');
+ comment.toggleClass('whatever');
+ comment.removeClass('whatever');
+ });
+
+
describe('hasClass', function() {
it('should check class', function() {
var selector = jqLite([a, b]);