如何用原生的js删除标签中的类名和添加类名?

假如一个标签中中有很多类名,我想删除其中的一个,或者给这个标签添加一个类名
该怎么做,我知道jquery很好实现,但我需要的是js,网上的感觉好复杂,还用到了正则,不知有什么简单的方法。

阅读 49.5k
7 个回答

试试这个

var classVal = document.getElementById("id").getAttribute("class");

//删除的话
classVal = classVal.replace("someClassName","");
document.getElementById("id").setAttribute("class",classVal );

//添加的话
classVal = classVal.concat(" someClassName");
document.getElementById("id").setAttribute("class",classVal );

//替换的话
classVal = classVal.replace("someClassName","otherClassName");
document.getElementById("id").setAttribute("class",classVal );

只是匹配个class名字,用不着正则应该。

我修改了一下1L的答案,注意空格

var classVal = document.getElementById("id").getAttribute("class");

classVal = " " + classVal + " ";

//删除的话,有三个地方加空格
classVal = classVal .replace(" someClassName "," ");
document.getElementById("id").setAttribute("class",classVal );

//添加的话,有一个地方加空格
classVal = classVal .concat(" someClassName");
document.getElementById("id").setAttribute("class",classVal );

//替换的话,有四个地方加空格
classVal = classVal .replace(" someClassName "," otherClassName ");
document.getElementById("id").setAttribute("class",classVal );

看了上面的答案,虽然有的空格不影响浏览器渲染结果,但强迫症患者觉得还是用正则靠谱。原来元素不包含类名的话添加的时候就不需要空格。如果已有元素,添加的时候就加空格,删除的时候,需要删除类名首空格。还是删除类名尾的空格。使用正则可以对付处理这些空格的情况。

function getByClass(oParent,sClass){
if(oParent.getElementsByClassName){
return oParent.getElementsByClassName(sClass);
}else{
var arr=[];
var reg=new RegExp('\b'+sClass+'\b');
var aEle=oParent.getElementsByTagName('*');
for(var i=0; i<aEle.length; i++){
if(reg.test(aEle[i].className)){
arr.push(aEle[i]);
}
}
return arr;
}
}

function hasClass(obj,sClass){
var reg=new RegExp('\b'+sClass+'\b');
return reg.test(obj.className);
}

function addClass(obj,sClass){
if(obj.className){
if(!hasClass(obj,sClass)){
obj.className+=' '+sClass;
}
}else{
obj.className=sClass;
}
}

function removeClass(obj,sClass){
var reg=new RegExp('\b'+sClass+'\b','g');
if(hasClass(obj,sClass)){
obj.className=obj.className.replace(reg,'').replace(/^\s+|\s+$/g,'').replace(/\s+/g,' ');
}
}

按照楼上的方式使用classList可以!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏