如何向给定元素添加类?
我有一个已经有类的元素:
<div class="someclass">
<img ... id="image1" name="image1" />
</div>
现在,我想创建一个 JavaScript 函数,它将向 div
添加一个类(不是替换,而是添加)。
我怎样才能做到这一点?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(28)
如果您仅针对现代浏览器:
使用 element.classList.add 添加一个类:
和 element.classList.remove 删除类:
如果您需要支持 Internet Explorer 9 或更低版本:
将空格加上新类的名称添加到元素的
className
属性中。 首先,在元素上放置一个id
,以便您可以轻松获取引用。然后
注意
otherclass
之前的空格。 包含该空间很重要,否则会影响类列表中位于其之前的现有类。另请参阅MDN 上的element.className。
If you're only targeting modern browsers:
Use element.classList.add to add a class:
And element.classList.remove to remove a class:
If you need to support Internet Explorer 9 or lower:
Add a space plus the name of your new class to the
className
property of the element. First, put anid
on the element so you can easily get a reference.Then
Note the space before
otherclass
. It's important to include the space otherwise it compromises existing classes that come before it in the class list.See also element.className on MDN.
在没有任何框架的情况下执行此操作的最简单方法是使用 element.classList.add 方法。
编辑:
如果您想从元素中删除类 -
我不想自己添加任何空白和重复条目处理(这是使用
document.className
方法时必需的)。 有一些浏览器限制,但您可以使用polyfills。The easiest way to do this without any framework is to use element.classList.add method.
Edit:
And if you want to remove class from an element -
I prefer not having to add any empty space and duplicate entry handling myself (which is required when using the
document.className
approach). There are some browser limitations, but you can work around them using polyfills.按照您的意愿找到您的目标元素“d”,然后:
您可以以更聪明的方式包装它以检查预先存在性,并检查空间要求等。
find your target element "d" however you wish and then:
you can wrap that in cleverer ways to check pre-existence, and check for space requirements etc..
添加类
交叉兼容
在以下示例中,我们将
classname
添加到元素。 这是 IE-8 兼容的。
这是以下内容的简写..
性能
如果您更关心性能而不是交叉兼容性,您可以将其缩短为以下内容,速度提高 4%。
方便
或者,您可以使用 jQuery,但结果性能会明显变慢。 根据 jsPerf 的数据,慢了 94%
删除类
性能
如果您关心性能,有选择地使用 jQuery 是删除类的最佳方法
没有 jQuery,速度会慢 32%
参考
使用原型删除类
使用 YUI
Add Class
Cross Compatible
In the following example we add a
classname
to the<body>
element. This is IE-8 compatible.This is shorthand for the following..
Performance
If your more concerned with performance over cross-compatibility you can shorten it to the following which is 4% faster.
Convenience
Alternatively you could use jQuery but the resulting performance is significantly slower. 94% slower according to jsPerf
Removing the class
Performance
Using jQuery selectively is the best method for removing a class if your concerned with performance
Without jQuery it's 32% slower
References
Using Prototype
Using YUI
使用 JavaScript 添加类的 2 种不同方法
JavaScript 提供了 2 种不同的方法来添加类HTML 元素:
element.classList.add()
方法className
属性1. 使用
element.classList.add()
方法2. 使用
element.className
属性注意:始终使用
+=
运算符,并在类名前添加空格使用 classList 方法添加类。2 different ways to add class using JavaScript
JavaScript provides 2 different ways by which you can add classes to HTML elements:
element.classList.add()
MethodclassName
property1. Using
element.classList.add()
Method2. Using
element.className
PropertyNote: Always use
+=
operator and add a space before class name to add class with classList method.使用纯 JavaScript 将类添加到元素的另一种方法
添加类:
删除类:
Another approach to add the class to element using pure JavaScript
For adding class:
For removing class:
或者:
当第二种方法不起作用时,第一种方法有助于添加类。
不要忘记在第一种方法中的
'someclassname'
前面保留一个空格。要删除,您可以使用:
OR:
First approach helped in adding the class when second approach didn't work.
Don't forget to keep a space in front of the
' someclassname'
in the first approach.For removal you can use:
当我所做的工作不需要使用库时,我使用这两个函数:
When the work I'm doing doesn't warrant using a library, I use these two functions:
假设您所做的不仅仅是添加这一类(例如,您还有异步请求等等),我会推荐一个像 原型 或 jQuery。
这将使您需要做的几乎所有事情(包括这个)变得非常简单。
假设您的页面上现在有 jQuery,您可以使用这样的代码将类名添加到元素(在本例中为加载时)
: jquery.com/" rel="noreferrer">jQuery API 浏览器 用于其他内容。
Assuming you're doing more than just adding this one class (eg, you've got asynchronous requests and so on going on as well), I'd recommend a library like Prototype or jQuery.
This will make just about everything you'll need to do (including this) very simple.
So let's say you've got jQuery on your page now, you could use code like this to add a class name to an element (on load, in this case):
Check out the jQuery API browser for other stuff.
您可以使用 classList.add 或 classList.remove 方法在元素中添加/删除类。
上面的代码将添加(而不是替换)一个类“anyclass”到 nameElem。
类似地,您可以使用 classList.remove() 方法来删除类。
You can use the classList.add OR classList.remove method to add/remove a class from a element.
The above code will add(and NOT replace) a class "anyclass" to nameElem.
Similarly you can use classList.remove() method to remove a class.
要向元素添加附加类:
要向元素添加类,而不删除/影响现有值,请附加一个空格和新类名,如下所示:
要更改元素的所有类:
将所有现有类替换为一个类或者更多新类,设置className属性:(
您可以使用空格分隔的列表来应用多个类。)
To add an additional class to an element:
To add a class to an element, without removing/affecting existing values, append a space and the new classname, like so:
To change all classes for an element:
To replace all existing classes with one or more new classes, set the className attribute:
(You can use a space-delimited list to apply multiple classes.)
这可能对 WordPress 开发人员等有帮助。
This might be helpful for WordPress developers etc.
如果您不想使用 jQuery 并且希望支持旧版浏览器:
If you don't want to use jQuery and want to support older browsers:
我也认为最快的方法是像 es5 中那样使用 Element.prototype.classList:
document.querySelector(".my.super-class").classList.add('new-class')
但在 ie8 中没有 Element.prototype.classList 这样的东西,无论如何你可以用这个片段填充它(可以随意编辑和改进它):
I too think that the fastest way is to use Element.prototype.classList as in es5:
document.querySelector(".my.super-class").classList.add('new-class')
but in ie8 there is no such thing as Element.prototype.classList, anyway you can polyfill it with this snippet (fell free to edit and improve it):
以简单的方式添加、删除或检查元素类:
To add, remove or check element classes in a simple way:
您可以使用类似于 jQuery 的现代方法
如果您只需要更改一个元素,即 JS 在 DOM 中找到的第一个元素,您可以使用以下方法:
请记住在类名称之前留一个空格。
如果你有多个类想要添加新类,你可以像这样使用它
You can use modern approach similar to jQuery
If you need to change only one element, first one that JS will find in DOM, you can use this:
Keep in mind to leave one space before class name.
If you have multiple classes where you want to add new class, you can use it like this
我知道 IE9 已正式关闭,我们可以使用
element.classList
来实现它,正如上面许多人所说的那样,但我只是尝试在上面的许多答案的帮助下了解它在没有classList
的情况下如何工作我可以学习它。下面的代码扩展了上面的许多答案,并通过避免添加重复的类来改进它们。
I know IE9 is shutdown officially and we can achieve it with
element.classList
as many told above but I just tried to learn how it works withoutclassList
with help of many answers above I could learn it.Below code extends many answers above and improves them by avoiding adding duplicate classes.
只是为了详细说明其他人所说的,多个 CSS 类组合在一个字符串中,并以空格分隔。 因此,如果您想对其进行硬编码,它看起来就像这样:
从那里您可以轻松导出添加新类所需的 javascript...只需将一个空格后跟新类附加到元素的 className 属性即可。 知道了这一点,您还可以编写一个函数来在以后需要时删除类。
Just to elaborate on what others have said, multiple CSS classes are combined in a single string, delimited by spaces. Thus, if you wanted to hard-code it, it would simply look like this:
From there you can easily derive the javascript necessary to add a new class... just append a space followed by the new class to the element's className property. Knowing this, you can also write a function to remove a class later should the need arise.
我认为最好使用纯 JavaScript,我们可以在浏览器的 DOM 上运行它。
这是使用它的功能方式。 我已经使用过 ES6,但您可以随意使用 ES5 和函数表达式或函数定义,只要适合您的 JavaScript StyleGuide 即可。
I think it's better to use pure JavaScript, which we can run on the DOM of the Browser.
Here is the functional way to use it. I have used ES6 but feel free to use ES5 and function expression or function definition, whichever suits your JavaScript StyleGuide.
纯JS示例。 在第一个示例中,我们获取元素的 id 并添加例如 2 个类。
在第二个示例中,我们获取元素的类名并添加 1。
Sample with pure JS. In first example we get our element's id and add e.g. 2 classes.
In second example we get element's class name and add 1 more.
对于那些使用 Lodash 并想要更新
className
字符串的用户:For those using Lodash and wanting to update
className
string:大多数人在
getElementById
上使用.classList.add
,但我想在getElementByClassName
上使用它。 为此,我使用了这样的forEach
:document.getElementsByClassName("class-name").forEach(element => element.classList.add("new-class") ));
但它不起作用,因为我发现
getElementsByClassName
返回 HTML 集合而不是数组。 为了处理这个问题,我使用以下代码将其转换为数组:[...document.getElementsByClassName("class-name")].forEach(element => element.classList.add("new-class") );
The majority of people use a
.classList.add
on agetElementById
, but I i wanted to use it on agetElementByClassName
. To do that, i was using aforEach
like this :document.getElementsByClassName("class-name").forEach(element => element.classList.add("new-class"));
But it didn't work because i discovered that
getElementsByClassName
returns a HTML collection and not an array. To handle that I converted it to an array with this code :[...document.getElementsByClassName("class-name")].forEach(element => element.classList.add("new-class"));
最短
Shortest
您可以使用 API querySelector 选择元素,然后使用该元素和新类名作为参数创建一个函数。 对于现代浏览器使用 classlist,否则对于 IE8。 然后您可以在事件发生后调用该函数。
You can use the API querySelector to select your element and then create a function with the element and the new classname as parameters. Using classlist for modern browsers, else for IE8. Then you can call the function after an event.
就我而言,我在 DOM 中有多个名为
main-wrapper
的类,但我只想影响父main-wrapper
。 使用:first 选择器
(https://api.jquery.com/first -selector/),我可以选择第一个匹配的 DOM 元素。 这就是我的解决方案:我也对 DOM 中特定 div 的第二个子级做了同样的事情,正如您在我使用
$('#deals-index > div:eq( 的代码中看到的那样) 0) > div:eq(1)').addClass('doubleheaderredesign');
.注意:如您所见,我使用了
jQuery
。In my case, I had more than one class called
main-wrapper
in the DOM, but I only wanted to affect the parentmain-wrapper
. Using:first Selector
(https://api.jquery.com/first-selector/), I could select the first matched DOM element. This was the solution for me:I also did the same thing for the second children of a specific div in my DOM as you can see in the code where I used
$('#deals-index > div:eq(0) > div:eq(1)').addClass('doubleheaderredesign');
.NOTE: I used
jQuery
as you can see.首先,给div一个id。 然后,调用函数appendClass:
first, give the div an id. Then, call function appendClass:
这个js代码对我有用
提供类名替换
添加仅使用
删除使用
希望这对某人有帮助
This js code works for me
provides classname replacement
To add just use
To remove use
Hope this is helpful to sombody
在 YUI 中,如果包含 yuidom,则可以使用
YAHOO.util.Dom.addClass('div1','className');
HTH
In YUI, if you include yuidom, you can use
YAHOO.util.Dom.addClass('div1','className');
HTH