下面这个函数是去掉元素上指定的className,这功能用得多,看了其它人写的,都是先把className转行数组后,再删掉的,我就用正则来做吧,写这个函数的时候也碰到了问题,幸好有群里的.net和小袁帮忙,才得以完成。
function removeClass(o, name) {
var oClass = o.className;
var reg = "/" + name + "[\\s|$]|\\s*" + name + "$/g";
//不能直写成/name[\s|$]|\s*name$/g,这样正则会直接把name当成字符串了,所以得用eval。
o.className = oClass ? oClass.replace(eval(reg), '') : '';
}
<div id="box" class="box1 box2 box"></div>
<script type="text/javascript">
var box11 = document.getElementById('box');
function removeClass(o,name){
var oClass = o.className;
var reg = "/"+name+"[\\s|$]|\\s*"+name+"$/g";
o.className = oClass ? oClass.replace(eval(reg),'') : '';
}
removeClass(box11,"box");
alert(box11.className);
</script>
id为box的class可以为空,box这个class也可以是任意位置。大家自己测试一下吧。
PS:刚才在书上看到正则里的另一个符号‘\b’;匹配字符边界,试了下,可以用在这里,这样正则的写法就题名简单了;
function removeClass(o, name) {
var oClass = o.className;
var reg = "/\\b" + name + "\\b/g";
o.className = oClass ? oClass.replace(eval(reg), '') : '';
}