当前位置:  开发笔记 > 编程语言 > 正文

如何向给定元素添加类?

如何解决《如何向给定元素添加类?》经验,为你挑选了10个好方法。

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

现在我想创建一个Javascript函数,它将一个类添加到div(不替换,但添加).

我怎样才能做到这一点?



1> Ishmael..:

将空格加上新类的名称添加到className元素的属性中.首先,放置id元素,以便您可以轻松获得参考.

然后

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

另请参见MDN上的element.className.


"除了学习JavaScript之外,"图书馆也将帮助其他一切"
如果需要使用JavaScript完成整个页面上的唯一工作是添加此类名称,那么是.但我不认为这是该页面唯一的动态部分.图书馆也将帮助其他一切.在30-50kb jQuery几乎不值得讨论.
将一个类添加到DOM元素与学习该语言有什么关系?document.getElementById('div1').className与库相关的问题一样多,使用jQuery也是如此.问题是"我怎么能这样做",经过彻底测试的图书馆是明智的答案.
@thenduks:我相信你知道JavaScript!== jQuery.这个问题的答案包括库和非库解决方案是一件好事,因为知道*如何*工作不仅仅是完成它们的最简单方法也很重要.你会注意到这个问题被标记为javascript
@meouw:我同意你的看法.然而,jQuery是用JavaScript编写的,所以我坚持要求OP提到一个库是一个好主意并不是"推动一个框架下来[他的]喉咙".就这样.
@QadirHussain:您必须手动解析字符串,然后将其分配给className.

2> Yuri..:

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

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

编辑: 如果你想从一个元素中删除类 -

element.classList.remove("otherclass");

我不希望自己添加任何空白空间和重复的条目处理(使用该document.className方法时需要).有一些浏览器限制,但您可以使用polyfills解决它们.


令人遗憾的是,在IE 10.0之前不支持这一点,因为它是一个出色的功能,也是我经常遇到的问题的最简单的解决方案.
可以使用classList的polyfill.
MDN上的[element.classList docs](https://developer.mozilla.org/en-US/docs/Web/API/Element.classList).
这个似乎是最好用的,因为有空间的人至少感觉像黑客 - 没有添加类...
@SilverRingvee太空方法的另一个风险是,其他一些开发人员可能不知道它至关重要,并将其删除以便清理.

3> annakata..:

找到你想要的目标元素"d"然后:

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

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


@DeathGrip只需将类设置回单个定义的名称d.className ='originalClass';

4> davidcondrey..:

添加课程

交叉兼容

在以下示例中,我们classname元素添加了一个.这是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');



删除课程

性能

如果您关注性能,有选择地使用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;


参考

    jsPerf测试用例:添加一个类

    jsPerf测试用例:删除类


使用Prototype

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")


@Adam他使用`classList`除了删除类之外的一切,这就是为什么我要问它.
还有'classList.remove()`.你为什么不用它?它比jQuery http://jsperf.com/remove-class-vanilla-vs-jquery快得多

5> Shoaib Chika..:

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

添加课程:

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

删除课程:

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


其他用户已多次回答这个问题,包括浏览器支持和填充程序的讨论.
@ShoaibChikate:如果你愿意,你也可以删除答案(你会保留积分).试着减少这个问题的混乱; 完全取决于你.

6> meouw..:

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

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


`if(cn.indexOf(classname)!= -1){return; }请注意,如果添加类"btn-info"的类"btn"已经在这里,则会失败.

7> rfunduk..:

假设你做的不仅仅是添加这个类(例如,你有异步请求等等),我建议使用像Prototype或jQuery这样的库.

这将使你需要做的所有事情(包括这个)变得非常简单.

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

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

查看jQuery API浏览器以获取其他内容.



8> 小智..:

您可以使用classList.add OR classList.remove方法从元素中添加/删除类.

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

上面的代码将为nameElem添加(而不是替换)类"anyclass".类似地,您可以使用classList.remove()方法删除类.

nameElem.classList.remove("anyclss")



9> Mo...:

要向元素添加其他类:

要在不删除/影响现有值的情况下向元素添加类,请添加空格和新类名,如下所示:

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

要更改元素的所有类:

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

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

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



10> Ferran Mayli..:

如果您不想使用jQuery并希望支持旧版浏览器:

function addClass(elem, clazz) {
    if (!elemHasClass(elem, clazz)) {
        elem.className += " " + clazz;
    }
}

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

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有