javascript - 原生JS封装removeClass()方法遇到正则不能传参?
PHPz
PHPz 2017-04-10 17:01:59
[JavaScript讨论组]

代码如下:

function removeClass(element, className) {
  element.className = element.className.replace(/(?:^|\s)className(?!\S)/g, '');
}

问题1:正则里面className直接解析成字符串了,而不是传入的参数。
问题2:如何修改成像jQuery一样用element.removeClass(className)调用?

谢谢~

有人能说一下问题2的思路吗?-.-!

PHPz
PHPz

学习是最好的投资!

全部回复(1)
阿神

楼主这样是直接新建了一个匹配className这个字符串本身的正则表达式

如果要通过变量新建正则表达式应该这样

function removeClass(element, className) {
  element.className
     = element.className
         .replace(new RegExp("\(\?:^|\\s)"+className+"(?!\\S\)", 'g'),"");
}

这种方法会在某种情况下出现意料之外的结果,例如

<p class="a b c"></p>

removeClass(p,"a c") //fail or unexpected

替换className最好的轮子个人认为大概是这样(仍有不完善的地方)。

function removeClass(element, className) {
    let targetClassNames = className.split(" ");
    let classNames = element.className.split(" ");
    return element.className = classNames
        .filter(className=>targetClassNames.indexOf(className)<0).join(" ");
}

function addClass(element, className) {
    let targetClassNames = className.split(" ");
    let classNames = element.className.split(" ");
    targetClassNames.filter(className=>classNames.indexOf(className)<0);
    return element.className = classNames.concat(targetClassNames).join(" "));
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号