Last active
November 16, 2015 16:03
-
-
Save abacaj/75a04299f9a30be8d19a to your computer and use it in GitHub Desktop.
High performance utility for manipulating DOM classes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var testDiv = document.querySelector('.test-div'); | |
function filterSpaces(strArray) { | |
return strArray.filter(function(str) { | |
return /\S/.test(str); | |
}); | |
} | |
function addClass(elem, className) { | |
var classes = filterSpaces(elem.className.split(' ')); | |
if (className.constructor === Array) { | |
var len = className.length; | |
var i = 0; | |
while (len--) { | |
console.log(i); | |
classes.push(className[i]); | |
i++; | |
} | |
} else { | |
classes.push(className); | |
} | |
elem.className = classes.join(' '); | |
return elem; | |
} | |
function hasClass(elem, className) { | |
var classes = filterSpaces(elem.className.split(' ')); | |
return classes.indexOf(className); | |
} | |
function toggleClass(elem, className) { | |
var classes = filterSpaces(elem.className.split(' ')); | |
return (hasClass(elem, className) !== -1) ? removeClass(elem, className) : addClass(elem, className); | |
} | |
function removeClass(elem, className) { | |
var classes = filterSpaces(elem.className.split(' ')); | |
var index = classes.indexOf(className); | |
if (index !== -1) { | |
classes.splice(index, 1); | |
} | |
elem.className = classes.join(' '); | |
return elem; | |
} | |
var testForClass = hasClass(testDiv, 'class-one'); | |
console.log("test for hasClass: " + testForClass); | |
var testForAddClass = addClass(testDiv, 'class'); | |
console.log("test for addClass: " + testForAddClass.className); | |
var testForMultipleAddClass = addClass(testDiv, ['class-added', 'class-added-two']); | |
console.log("test for multiple addClass: " + testForMultipleAddClass.className); | |
var testForRemoveClass = removeClass(testDiv, 'class-one'); | |
console.log("test for removeClass: " + testForRemoveClass.className); | |
var testForToggleClass = toggleClass(testDiv, 'class-added'); | |
console.log("test for toggleClass: " + testForToggleClass.className); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
example here: http://jsbin.com/xijona/edit?html,js,output
inspect the element with chrome inspector when making changes to see classes being manipulated.