正则 removeClass
下面这个函数是去掉元素上指定的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), '') : ''; }