js原生扩展addClass,removeClass,hasClass

参考了jquery对应的方法
首先要给原生的dom元素加入addClass等方法.先要知道加在哪个原型上面

引用一下MDN的API

Element

Element(元素)接口是 Document的一个对象. 这个接口描述了所有相同种类的元素所普遍具有的方法和属性。
这些继承自Element并且增加了一些额外功能的接口描述了具体的行为. 例如, HTMLElement 接口是所有HTML元素的基础接口,
而 SVGElement 接口是所有SVG元素的基本接口.

(function(e,doc){
        //正则,用于替换,制表符,回事,换行,分页符
        var rclass = /[\t\r\n\f]/g,
        //首尾空格
            rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g ;

        //如果没有trim方法则添加
        if (!String.prototype.trim) {
            String.prototype.trim = function () {
                return this.replace(rtrim, '');
            };
        };

        //添加class
        e.prototype.addClass = function(name) {
            var cl=this.getAttribute("class");
            if(!this.hasClass(name)) this.className=cl + " " + name;
            return this;
        };

        //判断是否存在class 参考jquery
        e.prototype.hasClass=function (name) {
            var className = " " + name + " ";
            if(this.nodeType == 1 && (" " + this.className + " ").replace(rclass, " ").indexOf( className ) >= 0 ){
                return true;
            }
            return false;
        };

        //移除class
        e.prototype.removeClass=function (name) {
            if(this.nodeType === 1 && this.className){
                var className= this.className ?
                        ( " " + this.className + " " ).replace( rclass, " " ) :
                        "";
                if(className){
                    className = className.replace(" " + name + " "," ");
                    this.className = className.trim();
                }
            }
            return this;
        };

        //获取dom元素
        window.dom=function(selector){
            return doc.querySelector(selector);
        }

    })(Element,document);

测试一段html内容,引入上面的自执行函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>tab</title>
    <style>
        div{
            line-height: 30px;
            padding: 15px;
            border: 1px solid #336699;
            width: 70%;
        }
        a{display: inline-block;margin: 0 15px;background: #eee;padding: 0 10px;text-decoration: none;color: #666}
        a.active{background: #336699;color: #fff}
    </style>
</head>
<body>

<div class="demo1">
    <a href="#" class="fdsd dds" data-mid-id="1" data-kis="1" id="demo__a1">menu1</a>
    <a href="#" id="demo__a2" data-mid.id="2">menu2</a>
    <a href="#" id="demo__a3" data-mid-id="3">menu3</a>
</div>

<div class="demo1__content" id="demo1__content">
    暂时没有内容
</div>

<script>

(function () {
        var m1=dom("#demo__a1"),
                m2=dom("#demo__a2"),
                m3=dom("#demo__a3"),
                content=dom("#demo1__content");

        m1.onclick=function () {
            content.innerHTML="menu1______1111";
            if(this.hasClass('active')){
                this.removeClass('active');
            }else{
                this.addClass("active");
            }
        }
        m2.onclick=function () {
            content.innerHTML="menu2______2222";
            if(this.hasClass('active')){
                this.removeClass('active');
            }else{
                this.addClass("active");
            }
        }
        m3.onclick=function () {
            content.innerHTML="menu3______3333";
            if(this.hasClass('active')){
                this.removeClass('active');
            }else{
                this.addClass("active");
            }
        }

    })();

</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值