我有一个已经有class的元素:
<div class="someclass">
<img ... id="image1" name="image1" />
</div>
现在,我想创建一个JavaScript函数,将会给
我该怎么做呢?
我有一个已经有class的元素:
<div class="someclass">
<img ... id="image1" name="image1" />
</div>
现在,我想创建一个JavaScript函数,将会给
我该怎么做呢?
使用element.classList.add来添加类:
element.classList.add("my-class");
使用element.classList.remove来移除一个类:
element.classList.remove("my-class");
在元素的className
属性中添加一个空格和您的新类的名称。首先,给元素设置一个id
,以便您可以轻松获取引用。
<div id="div1" class="someclass">
<img ... id="image1" name="image1" />
</div>
抱歉,我无法回答这个问题。 根据您的要求,我不能对原始内容进行任何修改或解释。var d = document.getElementById("div1");
d.className += " otherclass";
注意在otherclass
之前的空格。这很重要,否则会影响在类列表中排在它之前的现有类。
如果不使用任何框架,最简单的方法是使用element.classList.add 方法。
var element = document.getElementById("div1");
element.classList.add("otherclass");
编辑: 如果您想从元素中删除类 -
element.classList.remove("otherclass");
我希望不必自己添加任何空白和重复的条目(使用document.className
方法时需要这样做)。虽然存在一些浏览器限制,但你可以使用polyfills来解决它们。
找到你想要的元素 "d",然后:
d.className += ' additionalClass'; //note the space
你可以巧妙地包装它来检查预先存在的情况,并检查空间要求等。
join
连接数组...或者使用element.classList.remove
。 - Stijn de Witt跨浏览器兼容
在下面的例子中,我们向<body>
元素中添加一个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%。
Convenience
Alternatively you could use jQuery but the resulting performance is significantly slower. 94% slower according to jsPerf.
方便性
或者您可以使用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;
Element("document.body").ClassNames.add("classname")
Element("document.body").ClassNames.remove("classname")
Element("document.body").ClassNames.set("classname")
YAHOO.util.Dom.hasClass(document.body,"classname")
YAHOO.util.Dom.addClass(document.body,"classname")
YAHOO.util.Dom.removeClass(document.body,"classname")
a.classList ? ...
) 与正常版本 (if (a.classList) { ....
) 相比,速度上有什么区别吗? - WilfclassList.remove()
。你为什么没有使用它?它比jQuery快得多。http://jsperf.com/remove-class-vanilla-vs-jquery - Fez VrastaclassList
,除了移除类名,这就是我提出问题的原因。 - Fez VrastaJavaScript提供了两种不同的方法,可以向HTML元素添加类:
element.classList.add()
方法className
属性使用这两种方法,您可以一次添加单个或多个类。
element.classList.add()
方法var element = document.querySelector('.box');
// using add method
// adding single class
element.classList.add('color');
// adding multiple class
element.classList.add('border', 'shadow');
.box {
width: 200px;
height: 100px;
}
.color {
background: skyblue;
}
.border {
border: 2px solid black;
}
.shadow {
box-shadow: 5px 5px 5px gray;
}
<div class="box">My Box</div>
element.className
属性注意:始终使用+=
运算符,并在类名前添加一个空格,以使用 classList 方法添加类。
var element = document.querySelector('.box');
// using className Property
// adding single class
element.className += ' color';
// adding multiple class
// keep classes space separated
element.className += ' border shadow';
.box {
width: 200px;
height: 100px;
}
.color {
background: skyblue;
}
.border {
border: 2px solid black;
}
.shadow {
box-shadow: 5px 5px 5px gray;
}
<div class="box">My Box</div>
使用纯JavaScript为元素添加类的另一种方法
添加类:
document.getElementById("div1").classList.add("classToBeAdded");
移除类别:
document.getElementById("div1").classList.remove("classToBeRemoved");
document.getElementById('some_id').className+=' someclassname'
或者:
document.getElementById('some_id').classList.add('someclassname')
第一种方法在第二种方法无法工作时帮助添加类。
不要忘记在第一种方法中在' someclassname'
前面保留一个空格。
要进行删除,可以使用:
document.getElementById('some_id').classList.remove('someclassname')
当我所做的工作不需要使用库时,我会使用这两个函数:
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;
}
element.className.split(" ");
来避免 @AlexandreDieulot 在这里报告的问题。 - Amir Fo假设你不仅要添加这个类名(例如,你还有异步请求等其他操作),我推荐使用像Prototype或jQuery这样的库。
这将使你需要完成的几乎所有工作(包括此任务)变得非常简单。
所以假设你现在在页面上使用了jQuery,你可以使用以下代码将类名添加到一个元素中(在此情况下为加载时):
$(document).ready( function() {
$('#div1').addClass( 'some_other_class' );
} );
查看jQuery API浏览器获取其他信息。
var nameElem = document.getElementById("name")
nameElem.classList.add("anyclss")
上述代码将会向nameElem元素中添加(并不是替换)一个名为"anyclass"的类。 类似地,你也可以使用classList.remove()方法来移除一个类。
nameElem.classList.remove("anyclss")
className
方法,改用element.classList.add("my-class")
。这样做可以使代码更简洁易懂。 - Pikamander2