remove con clase cambiar and agregar javascript dom-manipulation

con - remove class javascript



¿Cómo agrego una clase a un elemento dado? (22)

Añadir clase

  • Compatible con cruces

    En el siguiente ejemplo, agregamos un nombre de classname al elemento <body> . Esto es compatible con IE-8.

    var a = document.body; a.classList ? a.classList.add(''classname'') : a.className += '' classname'';

    Esta es la taquigrafía de lo siguiente.

    var a = document.body; if (a.classList) { a.classList.add(''wait''); } else { a.className += '' wait''; }

  • Actuación

    Si está más preocupado por el rendimiento sobre la compatibilidad cruzada, puede reducirlo a lo siguiente, que es un 4% más rápido.

    var z = document.body; document.body.classList.add(''wait'');

  • Conveniencia

    Alternativamente, podrías usar jQuery pero el rendimiento resultante es significativamente más lento. 94% más lento según jsPerf

    $(''body'').addClass(''wait'');

Quitando la clase

  • Actuación

    Usar jQuery de forma selectiva es el mejor método para eliminar una clase si le preocupa el rendimiento

    var a = document.body, c = '' classname''; $(a).removeClass(c);

  • Sin jQuery es un 32% más lento.

    var a = document.body, c = '' classname''; a.className = a.className.replace( c, '''' ); a.className = a.className + c;

Referencias

  1. Caso de prueba jsPerf: Agregar una clase
  2. Caso de prueba jsPerf: Eliminar una clase

Utilizando prototipo

Element("document.body").ClassNames.add("classname") Element("document.body").ClassNames.remove("classname") Element("document.body").ClassNames.set("classname")

Usando YUI

YAHOO.util.Dom.hasClass(document.body,"classname") YAHOO.util.Dom.addClass(document.body,"classname") YAHOO.util.Dom.removeClass(document.body,"classname")

Tengo un elemento que ya tiene una clase:

<div class="someclass"> <img ... id="image1" name="image1" /> </div>

Ahora quiero crear una función de Javascript que agregue una clase al div (no reemplazar, pero agregar).

¿Cómo puedo hacer eso?


Para agregar una clase adicional a un elemento:

Para agregar una clase a un elemento, sin eliminar / afectar los valores existentes, agregue un espacio y el nuevo nombre de clase, así:

document.getElementById("MyElement").className += " MyClass";

Para cambiar todas las clases de un elemento:

Para reemplazar todas las clases existentes con una o más clases nuevas, establezca el atributo className:

document.getElementById("MyElement").className = "MyClass";

(Puede usar una lista delimitada por espacios para aplicar varias clases).


Agregue un espacio más el nombre de su nueva clase a la propiedad className del elemento. Primero, ponga una id en el elemento para que pueda obtener una referencia fácilmente.

<div id="div1" class="someclass"> <img ... id="image1" name="image1" /> </div>

Entonces

var d = document.getElementById("div1"); d.className += " otherclass";

Véase también element.className en MDN .


Creo que es mejor usar JavaScript puro, que podemos ejecutar en el DOM del navegador.

Aquí está la forma funcional de usarlo. He usado ES6 pero siéntase libre de usar ES5 y la expresión de función o definición de función, lo que se adapte a su Guía de Estilo de JavaScript.

''use strict'' const oldAdd = (element, className) => { let classes = element.className.split('' '') if (classes.indexOf(className) < 0) { classes.push(className) } element.className = classes.join('' '') } const oldRemove = (element, className) => { let classes = element.className.split('' '') const idx = classes.indexOf(className) if (idx > -1) { classes.splice(idx, 1) } element.className = classes.join('' '') } const addClass = (element, className) => { if (element.classList) { element.classList.add(className) } else { oldAdd(element, className) } } const removeClass = (element, className) => { if (element.classList) { element.classList.remove(className) } else { oldRemove(element, className) } }


Cuando el trabajo que estoy haciendo no justifica el uso de una biblioteca, uso estas dos funciones:

function addClass( classname, element ) { var cn = element.className; //test for existance if( cn.indexOf( classname ) != -1 ) { return; } //add a space if the element already has class if( cn != '''' ) { classname = '' ''+classname; } element.className = cn+classname; } function removeClass( classname, element ) { var cn = element.className; var rxp = new RegExp( "//s?//b"+classname+"//b", "g" ); cn = cn.replace( rxp, '''' ); element.className = cn; }


En YUI, si incluyes yuidom , puedes usar

YAHOO.util.Dom.addClass(''div1'',''className'');

HTH


Este código js funciona para mí

proporciona reemplazo de nombre de clase

var DDCdiv = hEle.getElementBy..... var cssCNs = DDCdiv.getAttribute(''class''); var Ta = cssCNs.split('' ''); //split into an array for (var i=0; i< Ta.length;i++) { if (Ta[i] == ''visible''){ Ta[i] = ''hidden''; break;// quit for loop } else if (Ta[i] == ''hidden''){ Ta[i] = ''visible''; break;// quit for loop } } DDCdiv.setAttribute(''class'',Ta.join('' '') ); // Join array with space and set class name

Para agregar solo usar

var cssCNs = DDCdiv.getAttribute(''class''); var Ta = cssCNs.split('' ''); //split into an array Ta.push(''New class name''); // Ta.push(''Another class name'');//etc... DDCdiv.setAttribute(''class'',Ta.join('' '') ); // Join array with space and set class name

Para eliminar el uso

var cssCNs = DDCdiv.getAttribute(''class''); var Ta = cssCNs.split('' ''); //split into an array for (var i=0; i< Ta.length;i++) { if (Ta[i] == ''visible''){ Ta.splice( i, 1 ); break;// quit for loop } } DDCdiv.setAttribute(''class'',Ta.join('' '') ); // Join array with space and set class name

Espero que esto sea útil para sombody


La forma más sencilla de hacer esto sin ningún marco es usar el método element.classList.add .

var element = document.getElementById("div1"); element.classList.add("otherclass");

Edit: Y si quieres eliminar la clase de un elemento -

element.classList.remove("otherclass");

Prefiero no tener que agregar ningún espacio vacío y duplicar el manejo de las entradas a mí mismo (lo cual es necesario cuando se utiliza el enfoque document.className ). Existen algunas limitaciones del navegador , pero puede polyfills utilizando polyfills .


Muestra con JS puro. En el primer ejemplo obtenemos el id de nuestro elemento y agregamos, por ejemplo, 2 clases.

document.addEventListener(''DOMContentLoaded'', function() { document.getElementsById(''tabGroup'').className = "anyClass1 anyClass2"; })

En el segundo ejemplo obtenemos el nombre de clase del elemento y agregamos 1 más.

document.addEventListener(''DOMContentLoaded'', function() { document.getElementsByClassName(''tabGroup'')[0].className = "tabGroup ready"; })


Otro enfoque para agregar la clase al elemento usando JavaScript puro

Para añadir clase:

document.getElementById("div1").classList.add("classToBeAdded");

Para eliminar clase:

document.getElementById("div1").classList.remove("classToBeRemoved");


Para agregar, eliminar o verificar clases de elementos de una manera sencilla:

var uclass = { exists: function(elem,className){var p = new RegExp(''(^| )''+className+''( |$)'');return (elem.className && elem.className.match(p));}, add: function(elem,className){if(uclass.exists(elem,className)){return true;}elem.className += '' ''+className;}, remove: function(elem,className){var c = elem.className;var p = new RegExp(''(^| )''+className+''( |$)'');c = c.replace(p,'' '').replace(/ /g,'' '');elem.className = c;} }; var elem = document.getElementById(''someElem''); //Add a class, only if not exists yet. uclass.add(elem,''someClass''); //Remove class uclass.remove(elem,''someClass'');


Para aquellos que usan Lodash y desean actualizar la cadena className :

// get element reference var elem = document.getElementById(''myElement''); // add some classes. Eg. ''nav'' and ''nav header'' elem.className = _.chain(elem.className).split(/[/s]+/).union([''nav'',''navHeader'']).join('' '').value() // remove the added classes elem.className = _.chain(elem.className).split(/[/s]+/).difference([''nav'',''navHeader'']).join('' '').value()


Puede usar el API querySelector para seleccionar su elemento y luego crear una función con el elemento y el nuevo nombre de clase como parámetros. Usando la lista de clases para los navegadores modernos, o bien para IE8. Luego puedes llamar a la función después de un evento.

//select the dom element var addClassVar = document.querySelector(''.someclass''); //define the addclass function var addClass = function(el,className){ if (el.classList){ el.classList.add(className); } else { el.className += '' '' + className; } }; //call the function addClass(addClassVar, ''newClass'');


Puede usar el método classList.add O classList.remove para agregar / eliminar una clase de un elemento.

var nameElem = document.getElementById("name") nameElem.classList.add("anyclss")

El código anterior agregará (y NO reemplazará) una clase "anyclass" para nameElem. De manera similar, puede usar el método classList.remove () para eliminar una clase.

nameElem.classList.remove("anyclss")


Puedes usar un enfoque moderno similar a jQuery

Si necesita cambiar solo un elemento, el primero que JS encontrará en DOM, puede usar esto:

document.querySelector(''.someclass'').className += " red";

.red { color: red; }

<div class="someclass"> <p>This method will add class "red" only to first element in DOM</p> </div> <div class="someclass"> <p>lorem ipsum</p> </div> <div class="someclass"> <p>lorem ipsum</p> </div> <div class="someclass"> <p>lorem ipsum</p> </div>

Tenga en cuenta dejar un espacio antes del nombre de la clase.

Si tiene varias clases en las que desea agregar una nueva clase, puede usarla de esta manera

document.querySelectorAll(''.someclass'').forEach(function(element) { element.className += " red"; });

.red { color: red; }

<div class="someclass"> <p>This method will add class "red" to all elements in DOM that have "someclass" class.</p> </div> <div class="someclass"> <p>lorem ipsum</p> </div> <div class="someclass"> <p>lorem ipsum</p> </div> <div class="someclass"> <p>lorem ipsum</p> </div>


Sé que IE9 se apaga oficialmente y podemos lograrlo con element.classList como muchos dijeron anteriormente, pero solo traté de aprender cómo funciona sin classList con la ayuda de muchas respuestas anteriores, podría aprenderlo.

El código a continuación extiende muchas de las respuestas anteriores y las mejora evitando agregar clases duplicadas.

function addClass(element,className){ var classArray = className.split('' ''); classArray.forEach(function (className) { if(!hasClass(element,className)){ element.className += " "+className; } }); } //this will add 5 only once addClass(document.querySelector(''#getbyid''),''3 4 5 5 5'');


Si no desea utilizar jQuery y desea admitir navegadores más antiguos:

function addClass(elem, clazz) { if (!elemHasClass(elem, clazz)) { elem.className += " " + clazz; } } function elemHasClass(elem, clazz) { return new RegExp("( |^)" + clazz + "( |$)").test(elem.className); }


Solo para detallar lo que otros han dicho, varias clases de CSS se combinan en una sola cadena, delimitada por espacios. Por lo tanto, si quisieras codificarlo, simplemente se vería así:

<div class="someClass otherClass yetAnotherClass"> <img ... id="image1" name="image1" /> </div>

Desde allí puede derivar fácilmente el javascript necesario para agregar una nueva clase ... simplemente agregue un espacio seguido de la nueva clase a la propiedad className del elemento. Sabiendo esto, también puede escribir una función para eliminar una clase más tarde si es necesario.


Suponiendo que está haciendo más que solo agregar esta clase (por ejemplo, tiene solicitudes asíncronas y así sucesivamente), recomendaría una biblioteca como Prototype o jQuery .

Esto hará que todo lo que necesite hacer (incluido esto) sea muy simple.

Entonces, digamos que tienes jQuery en tu página ahora, podrías usar un código como este para agregar un nombre de clase a un elemento (en carga, en este caso):

$(document).ready( function() { $(''#div1'').addClass( ''some_other_class'' ); } );

Echa un vistazo al navegador jQuery API para otras cosas.


Yo también creo que la forma más rápida es usar Element.prototype.classList como en es5: document.querySelector(".my.super-class").classList.add(''new-class'') pero en ie8 no hay tal cosa como Element.prototype.classList, de todos modos puede rellenarlo con este fragmento de código (puede editarlo y mejorarlo):

if(Element.prototype.classList === void 0){ function DOMTokenList(classes, self){ typeof classes == "string" && (classes = classes.split('' '')) while(this.length){ Array.prototype.pop.apply(this); } Array.prototype.push.apply(this, classes); this.__self__ = this.__self__ || self } DOMTokenList.prototype.item = function (index){ return this[index]; } DOMTokenList.prototype.contains = function (myClass){ for(var i = this.length - 1; i >= 0 ; i--){ if(this[i] === myClass){ return true; } } return false } DOMTokenList.prototype.add = function (newClass){ if(this.contains(newClass)){ return; } this.__self__.className += (this.__self__.className?" ":"")+newClass; DOMTokenList.call(this, this.__self__.className) } DOMTokenList.prototype.remove = function (oldClass){ if(!this.contains(newClass)){ return; } this[this.indexOf(oldClass)] = undefined this.__self__.className = this.join('' '').replace(/ +/, '' '') DOMTokenList.call(this, this.__self__.className) } DOMTokenList.prototype.toggle = function (aClass){ this[this.contains(aClass)? ''remove'' : ''add''](aClass) return this.contains(aClass); } DOMTokenList.prototype.replace = function (oldClass, newClass){ this.contains(oldClass) && this.remove(oldClass) && this.add(newClass) } Object.defineProperty(Element.prototype, ''classList'', { get: function() { return new DOMTokenList( this.className, this ); }, enumerable: false }) }


encuentre el elemento de destino "d" como desee y luego:

d.className += '' additionalClass''; //note the space

puede envolver eso en formas más inteligentes para verificar la preexistencia, y verificar los requisitos de espacio, etc.


primero, dale al div una id. Luego, llame a la función appendClass:

<script language="javascript"> function appendClass(elementId, classToAppend){ var oldClass = document.getElementById(elementId).getAttribute("class"); if (oldClass.indexOf(classToAdd) == -1) { document.getElementById(elementId).setAttribute("class", classToAppend); } } </script>