Skip to content

Commit f1d5ae4

Browse files
vojtajinajamesdaily
authored andcommitted
fix(jqLite): ignore class methods on comment elements
Since c785267 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.
1 parent 7a6e821 commit f1d5ae4

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

src/jqLite.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -279,12 +279,13 @@ function JQLiteData(element, key, value) {
279279
}
280280

281281
function JQLiteHasClass(element, selector) {
282+
if (!element.getAttribute) return false;
282283
return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " ").
283284
indexOf( " " + selector + " " ) > -1);
284285
}
285286

286287
function JQLiteRemoveClass(element, cssClasses) {
287-
if (cssClasses) {
288+
if (cssClasses && element.setAttribute) {
288289
forEach(cssClasses.split(' '), function(cssClass) {
289290
element.setAttribute('class', trim(
290291
(" " + (element.getAttribute('class') || '') + " ")
@@ -296,7 +297,7 @@ function JQLiteRemoveClass(element, cssClasses) {
296297
}
297298

298299
function JQLiteAddClass(element, cssClasses) {
299-
if (cssClasses) {
300+
if (cssClasses && element.setAttribute) {
300301
var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ')
301302
.replace(/[\n\t]/g, " ");
302303

test/jqLiteSpec.js

+10
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,16 @@ describe('jqLite', function() {
493493
});
494494

495495

496+
it('should ignore comment elements', function() {
497+
var comment = jqLite(document.createComment('something'));
498+
499+
comment.addClass('whatever');
500+
comment.hasClass('whatever');
501+
comment.toggleClass('whatever');
502+
comment.removeClass('whatever');
503+
});
504+
505+
496506
describe('hasClass', function() {
497507
it('should check class', function() {
498508
var selector = jqLite([a, b]);

0 commit comments

Comments
 (0)