Skip to content

Instantly share code, notes, and snippets.

@eiriarte
Last active September 18, 2018 17:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eiriarte/4730e96d4a5171805f1b43f2b038786a to your computer and use it in GitHub Desktop.
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)
/**
* 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