¿Cómo se pueden asignar múltiples clases de CSS a un elemento html a través de javascript sin usar ninguna biblioteca?JavaScript CSS cómo agregar y eliminar múltiples clases de CSS a un elemento
Respuesta
Intente hacer esto ...
document.getElementById("MyElement").className += " MyClass";
conseguimos esto here ...
Solo necesita separar cada nombre de clase con un espacio: object.className = '" class1 class2 class3 "' –
garantizados para trabajar en nuevos navegadores. el antiguo método className no puede, ya que está obsoleto.
<element class="oneclass" />
element.setAttribute('class', element.getAttribute('class') + ' another');
alert(element.getAttribute('class')); // oneclass another
Esto funciona:
myElement.className = 'foo bar baz';
Tal vez:
document.getElementById("myEle").className = "class1 class2";
No se ha probado, pero debería funcionar.
Prueba esto:
function addClass(element, value) {
if(!element.className) {
element.className = value;
} else {
newClassName = element.className;
newClassName+= " ";
newClassName+= value;
element.className = newClassName;
}
}
Una lógica similar se podría utilizar para hacer una función removeClass.
sólo tiene que utilizar este
element.getAttributeNode("class").value += " antherClass";
tener cuidado acerca de espacio para evitar mezclar la clase de edad con nueva clase
En los navegadores modernos, el classList API es supported.
Esto permite una (vainilla) de JavaScript así:
var addClasses;
addClasses = function (selector, classArray) {
'use strict';
var className, element, elements, i, j, lengthI, lengthJ;
elements = document.querySelectorAll(selector);
// Loop through the elements
for (i = 0, lengthI = elements.length; i < lengthI; i += 1) {
element = elements[i];
// Loop through the array of classes to add one class at a time
for (j = 0, lengthJ = classArray.length; j < lengthJ; j += 1) {
className = classArray[j];
element.classList.add(className);
}
}
};
navegadores modernos (no IE) soportan el paso de varios argumentos para la función classList::add
, lo que eliminaría la necesidad de que el bucle anidado, la simplificación de la funcionar un poco:
var addClasses;
addClasses = function (selector, classArray) {
'use strict';
var classList, className, element, elements, i, j, lengthI, lengthJ;
elements = document.querySelectorAll(selector);
// Loop through the elements
for (i = 0, lengthI = elements.length; i < lengthI; i += 1) {
element = elements[i];
classList = element.classList;
// Pass the array of classes as multiple arguments to classList::add
classList.add.apply(classList, classArray);
}
};
Uso
addClasses('.button', ['large', 'primary']);
versión funcional
var addClassesToElement, addClassesToSelection;
addClassesToElement = function (element, classArray) {
'use strict';
classArray.forEach(function (className) {
element.classList.add(className);
});
};
addClassesToSelection = function (selector, classArray) {
'use strict';
// Use Array::forEach on NodeList to iterate over results.
// Okay, since we’re not trying to modify the NodeList.
Array.prototype.forEach.call(document.querySelectorAll(selector), function (element) {
addClassesToElement(element, classArray)
});
};
// Usage
addClassesToSelection('.button', ['button', 'button--primary', 'button--large'])
La función classList::add
evitará que varias instancias de la misma clase CSS a diferencia de algunas de las respuestas anteriores.
Recursos sobre la API classList:
var el = document.getElementsByClassName('myclass')
el[0].classList.add('newclass');
el[0].classList.remove('newclass');
Para saber si la clase exis ts o no, utilizan: el apoyo
el[0].classList.contains('newclass'); // this will return true or false
navegador IE8 +
http://caniuse.com/#feat=classlist IE10 + .. – poxip
Aquí es un método más simple para agregar varias clases a través de classList
(soportado por todos los navegadores modernos, como se ha señalado en otras respuestas aquí):
div.classList.add('foo', 'bar'); // add multiple classes
Desde: https://developer.mozilla.org/en-US/docs/Web/API/Element/classList#Examples
Si usted tiene un arr ay de los nombres de las clases para añadir a un elemento, se puede utilizar el ES6 spread operator pasar a todos en classList.add()
a través de este de una sola línea:
let classesToAdd = [ 'foo', 'bar', 'baz' ];
div.classList.add(...classesToAdd);
Tenga en cuenta que no todos los navegadores soportan ES6 forma nativa todavía, así como con cualquier otro ES6 responda que probablemente quiera usar un transpiler como Babel, o simplemente seguir con ES5 y usar una solución como la de @ZayZee.
Tal vez esto le ayudará a aprender:
//<![CDATA[
/* external.js */
var doc, bod, htm, C, E, addClassName, removeClassName; // for use onload elsewhere
addEventListener('load', function(){
doc = document; bod = doc.body; htm = doc.documentElement;
C = function(tag){
return doc.createElement(tag);
}
E = function(id){
return doc.getElementById(id);
}
addClassName = function(element, className){
var rx = new RegExp('^(.+\s)*'+className+'(\s.+)*$');
if(!element.className.match(rx)){
element.className += ' '+className;
}
return element.className;
}
removeClassName = function(element, className){
element.className = element.className.replace(new RegExp('\s?'+className), '');
return element.className;
}
var out = E('output'), mn = doc.getElementsByClassName('main')[0];
out.innerHTML = addClassName(mn, 'wow');
out.innerHTML = addClassName(mn, 'cool');
out.innerHTML = addClassName(mn, 'it works');
out.innerHTML = removeClassName(mn, 'wow');
out.innerHTML = removeClassName(mn, 'main');
}); // close load
//]]>
/* external.css */
html,body{
padding:0; margin:0;
}
.main{
width:980px; margin:0 auto;
}
<!DOCTYPE html>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
<head>
<meta http-equiv='content-type' content='text/html;charset=utf-8' />
<link type='text/css' rel='stylesheet' href='external.css' />
<script type='text/javascript' src='external.js'></script>
</head>
<body>
<div class='main'>
<div id='output'></div>
</div>
</body>
</html>
- 1. jQuery selecciona un elemento por múltiples clases css
- 2. eliminar/restablecer css heredado de un elemento
- 3. Múltiples clases de pseudoclases de CSS
- 4. ¿Cómo agregar múltiples elementos CSS a un div usando jQuery?
- 5. ¿Cómo agregar múltiples gradientes de CSS como un fondo múltiple?
- 6. css nth-child y clases
- 7. CSS Clases y subclases
- 8. ¿Cómo obtener todas las clases CSS de un elemento?
- 9. Listado de clases CSS conocidas usando Javascript
- 10. ¿Cómo eliminar un elemento del flujo de HTML/CSS?
- 11. Agregar clase CSS a un elemento mientras arrastra w/jQuery
- 12. ¿Cómo tener múltiples transiciones de CSS en un elemento?
- 13. Cómo eliminar una clase usando CSS
- 14. ¿Cómo agregar clases de CSS y una ID a los párrafos en CKEditor?
- 15. Agregar clase CSS en el pseudo-elemento
- 16. Javascript y CSS, usando guiones
- 17. Quiero agregar un elemento secundario a mis elementos de menú en jQuery y css
- 18. CSS/JavaScript: Elemento elemento superior z-superior/elemento modal superior
- 19. clases de css para el elemento raíz html?
- 20. Múltiples archivos javascript/css: ¿mejores prácticas?
- 21. CSS - clases comunes
- 22. Cómo llegar elementos HTML con múltiples clases CSS
- 23. Múltiples archivos CSS y rendimiento
- 24. jQuery agregar/eliminar clase css en la radio seleccionada
- 25. Importar CSS o múltiples archivos CSS
- 26. minifying y Obsfucating CSS similar a Javascript
- 27. HTML y CSS a PDF en JavaScript
- 28. Agregar propiedad CSS a jQuery
- 29. Clases de jerarquización CSS
- 30. Combinar y minificar múltiples archivos CSS/JS
veo por las respuestas que hay cierta confusión aquí. ¿Desea poder aplicar un conjunto constante de múltiples clases a un elemento, o desea poder agregar más clases a un elemento que originalmente tenía? – ProfK