Last active
December 24, 2017 01:21
-
-
Save Danilo-Araujo-Silva/cada6018c5b0c06b535176b7e904f8d0 to your computer and use it in GitHub Desktop.
hasClass, addClass, removeClass, toggleClass implementation in ES6
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
/** | |
* | |
* @param classNames | |
* @param className | |
* @returns {boolean} | |
*/ | |
export function hasClass(classNames, className) { | |
return new RegExp(` ${className} `).test(` ${classNames} `) | |
} | |
/** | |
* | |
* @param classNames | |
* @param className | |
* @returns {*} | |
*/ | |
export function addClass(classNames, className) { | |
let output = classNames | |
if (!hasClass(classNames, className)) { | |
output = `${classNames} ${className}` | |
} | |
return output | |
} | |
/** | |
* | |
* @param classNames | |
* @param className | |
* @returns {string} | |
*/ | |
export function removeClass(classNames, className) { | |
let output = ` ${classNames.replace(/[\t\r\n]/g, ' ')} ` | |
if (hasClass(classNames, className)) { | |
while (output.indexOf(` ${className} `) >= 0) { | |
output = output.replace(` ${className} `, ' ') | |
} | |
output = output.replace(/^\s+|\s+$/g, '') | |
return output | |
} | |
} | |
/** | |
* | |
* @param classNames | |
* @param className | |
* @returns {string} | |
*/ | |
export function toggleClass(classNames, className) { | |
let output = ` ${classNames.replace( /[\t\r\n]/g, ' ')} ` | |
if (hasClass(classNames, className)) { | |
while (output.indexOf(` ${className} `) >= 0) { | |
output = output.replace(` ${className} `, ' ') | |
} | |
output = output.replace(/^\s+|\s+$/g, '') | |
} else { | |
output += ` ${className}` | |
} | |
return output | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment