Last active
September 18, 2018 17:10
-
-
Save eiriarte/4730e96d4a5171805f1b43f2b038786a to your computer and use it in GitHub Desktop.
Función que alterna una clase de un elemento (la elimina si existe, la añade si no)
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
/** | |
* Alterna una clase de un elemento (la elimina si existe, la añade si no) | |
* @param {object}<Element> elemento - Elemento a manipular | |
* @param {object}<String> clase - Clase a alternar | |
* @returns {boolean} True si se añadió la clase, False si se eliminó | |
*/ | |
function alternarClase(elemento, clase) { | |
var clases, i; | |
clase = '' + clase; | |
if (!(elemento instanceof Element)) { | |
throw new TypeError('Se esperaba un elemento'); | |
} | |
if (clase === '' || clase.indexOf(' ') !== -1) { | |
throw new SyntaxError('Nombre de clase no válido'); | |
} | |
if (elemento.classList) { | |
// Usa el método nativo toggle, si está disponible | |
return elemento.classList.toggle(clase); | |
} else if (elemento.className === '') { | |
elemento.className = clase; | |
return true; | |
} else { | |
clases = elemento.className.split(' '); | |
for (i = 0; clases[i] !== clase && i < clases.length; i++); | |
if (i < clases.length) { | |
clases.splice(i, 1); | |
} else { | |
clases.push(clase); | |
} | |
elemento.className = clases.join(' '); | |
return clases[i] === clase; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment