From 2a61f8ef73d28450719aca0e3c56e1de718ae801 Mon Sep 17 00:00:00 2001 From: Alexey Kupriyanenko Date: Mon, 9 Mar 2015 18:39:27 +0200 Subject: [PATCH] Add .addClass, .removeClass, .toggleClass and .hasClass methods #40 --- src/attributes.js | 56 +++++++++++++++++++++++++++++++++++++ test/attributes.js | 69 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+) diff --git a/src/attributes.js b/src/attributes.js index 1452796..ea37a58 100644 --- a/src/attributes.js +++ b/src/attributes.js @@ -167,3 +167,59 @@ fn.removeData = function(key) { return this; }; + +fn.addClass = function(className) { + var i = 0, + j = 0, + length = this.length, + classes = className.trim().split(/\s+/); + + for (; i < length; i++) { + j = 0; + + for (j = 0; j < classes.length; j++) { + this[i].classList.add(classes[j]); + } + } + + return this; +}; + +fn.removeClass = function(className) { + var i = 0, + j = 0, + length = this.length, + classes = className.trim().split(/\s+/); + + for (; i < length; i++) { + j = 0; + + for (j = 0; j < classes.length; j++) { + this[i].classList.remove(classes[j]); + } + } + + return this; +}; + +fn.toggleClass = function(className) { + var i = 0, length = this.length; + + for (; i < length; i++) { + this[i].classList.toggle(className); + } + + return this; +}; + +fn.hasClass = function(className) { + var i = 0, length = this.length; + + for (; i < length; i++) { + if (this[i].classList.contains(className)) { + return true; + } + } + + return false; +}; diff --git a/test/attributes.js b/test/attributes.js index 93ea868..c8dbcba 100644 --- a/test/attributes.js +++ b/test/attributes.js @@ -160,4 +160,73 @@ describe('jBone Attributes', function() { a.removeData(); }); + it('hasClass(name) should check if class exist', function() { + var a = jBone('
'); + var b = jBone('
'); + + expect(a.hasClass('name')).be.eql(true); + expect(a.hasClass('not-name')).be.eql(false); + expect(b.hasClass('name')).be.eql(false); + }); + + it('addClass(name) should add new class', function() { + var a = jBone('
'); + a.addClass('name'); + + expect(a[0].getAttribute('class')).be.eql('name'); + }); + + it('addClass(name) shouldn\'t add new class if class already exist', function() { + var a = jBone('
'); + a.addClass('name'); + + expect(a[0].getAttribute('class')).be.eql('name'); + }); + + it('addClass(first second) should add multiple classes', function() { + var a = jBone('
'); + a.addClass('first second'); + + expect(a[0].getAttribute('class')).be.eql('first second'); + }); + + it('removeClass(name) should remove existing class', function() { + var a = jBone('
'); + a.removeClass('name'); + + expect(a[0].getAttribute('class')).be.eql(''); + }); + + it('removeClass(first second) should remove multiple classes', function() { + var a = jBone('
'); + a.removeClass('first second'); + + expect(a[0].getAttribute('class')).be.eql(''); + }); + + it('removeClass(name) should work correct with not existing class', function() { + var a = jBone('
'); + a.removeClass('not-name'); + + expect(a[0].getAttribute('class')).be.eql('name'); + + var b = jBone('
'); + b.removeClass('not-name'); + + expect(b[0].getAttribute('class')).be.eql(null); + }); + + it('toggleClass(name) should add new class if class not exist', function() { + var a = jBone('
'); + a.toggleClass('name'); + + expect(a[0].getAttribute('class')).be.eql('name'); + }); + + it('toggleClass(name) should remove class if class is exist', function() { + var a = jBone('
'); + a.toggleClass('name'); + + expect(a[0].getAttribute('class')).be.eql(''); + }); });