如何将一个类添加到给定的元素?

我有一个已经有一个类的元素:

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

现在我想创build一个JavaScript函数,将添加一个类到div (不replace,但添加)。

我怎样才能做到这一点?

向元素的className属性添加一个空格加上新类的名称。 首先,在元素上添加一个id ,以便您可以轻松获得参考。

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

然后

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

另请参阅MDN上的element.className 。

没有任何框架的最简单的方法是使用element.classList.add方法。

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

编辑:如果你想从元素中删除类 –

 element.classList.remove("otherclass"); 

我更喜欢不必添加任何空的空间和重复的条目处理我自己(这是使用document.className方法时需要)。 有一些浏览器的限制 ,但你可以使用polyfills来解决它们。

find你的目标元素“d”然而你希望然后:

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

你可以用更聪明的方式来包装,检查前存在,并检查空间要求等。

添加类

  • 交叉兼容

    在下面的例子中,我们将一个classname添加到<body>元素中。 这是IE-8兼容。

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

    这是以下的简写。

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

  • 性能

    如果您更关心性能而不是交叉兼容性,则可以将其缩短到以下4%的速度。

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

  • 方便

    另外,你可以使用jQuery,但是结果的性能要慢很多。 据jsPerf说,慢了94%

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


删除课程

  • 性能

    有select地使用jQuery是去除一个类的最好的方法,如果你担心性能

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

  • 没有jQuery,它的速度慢了32%

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

参考

  1. jsPerftesting用例:添加一个类
  2. jsPerftesting用例:删除一个类

使用原型

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

使用YUI

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

另一种使用纯JavaScript将元素添加到元素的方法

添加类:

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

删除类:

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

当我正在做的工作不保证使用库时,我使用这两个函数:

 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; } 

假设你所做的不仅仅是添加这个类(例如,你有asynchronous请求等等),我还是推荐一个类似Prototype或者jQuery的库。

这将使你需要做的一切(包括这个)都变得非常简单。

假设你现在已经在你的页面上使用了jQuery,你可以使用这样的代码为一个元素添加一个类名(在这种情况下,在加载时):

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

查看其他东西的jQuery API浏览器 。

你可以使用classList.add或者classList.remove方法从一个元素中添加/删除一个类。

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

上面的代码将添加(而不是replace)一个类“anyclass”到nameElem。 同样,你可以使用classList.remove()方法来删除一个类。

 nameElem.classList.remove("anyclss") 

为一个元素添加一个额外的类:

要添加一个类到一个元素,而不删除/影响现有的值,追加一个空格和新的类名,如下所示:

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

要更改元素的所有类:

要用一个或多个新类replace所有现有类,请设置className属性:

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

(您可以使用空格分隔的列表来应用多个类。)

为了详细说明别人的说法,多个CSS类被合并在一个由空格分隔的string中。 因此,如果你想对它进行硬编码,它将看起来像这样:

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

从那里你可以很容易地派生出必要的JavaScript添加一个新的类…只需追加一个空间,然后新的类到元素的className属性。 知道这一点,你也可以编写一个函数,以便在需要时删除类。

要以简单的方式添加,删除或检查元素类:

 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'); 

如果您不想使用jQuery并且想要支持较旧的浏览器:

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

我知道IE9正式closures,我们可以通过element.classList来实现,正如很多人所说的,但是我只是试着学习如何在没有classList情况classList使用上面的许多答案来学习它。

下面的代码扩展了上面的许多答案,并通过避免添加重复类来改进它

 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'); 

用纯JS的示例。 在第一个例子中,我们得到我们的元素的ID和添加例如2类。

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

在第二个例子中,我们获取元素的类名并添加1个。

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

我认为最好使用纯JavaScript,我们可以在浏览器的DOM上运行。

这是使用它的function方式。 我已经使用了ES6,但可以随意使用ES5和函数expression式或函数定义,以适合您的JavaScript StyleGuide。

 '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) } } 

首先给这个div一个id。 然后,调用函数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> 

您可以使用API​​ querySelectorselect您的元素,然后使用元素和新的类名作为参数创build一个函数。 对于现代浏览器使用classlist,对于IE8使用classlist。 然后你可以在事件发生后调用这个函数。

  //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'); 

对于那些使用Lodash并想更新classNamestring的人:

 // 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() 

您可以使用类似于jQuery的现代方法

如果您只需要更改一个元素,那么首先在JS中find的元素就可以使用:

 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> 

这js代码为我工作

提供了类名replace

 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 

要添加只是使用

 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 

删除使用

 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 

希望这有助于缓解

在YUI中,如果你包含yuidom ,你可以使用

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

HTH

 function toggleClass (El) { if (El.className != "white") { El.className = "white" } else{ El.className = "black"; }; } 

这将切换你想要切换没有jQuery的类