JS模拟JQ:hasClass、addClass、removeClass方法(初探JQ)

本文介绍了一种自制的jQuery库实现,通过模仿jQuery的核心功能,如选择器、类操作等,提供了一个轻量级的替代方案。文章详细解释了如何通过自定义函数实现元素的选择、类的添加和移除,并展示了基本的使用示例。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JQuery初探</title>
</head>
<body>
    <div id="box1" class="box">
        <span>1112</span>
    </div>
    <div id="box2" class="box">
        <span>1113</span>
    </div>
    <div id="box3" class="box">
        <span>1113</span>
    </div>
    <script>
        var Kodo = function(selector){
            return new Kodo.prototype.init(selector);
        }
        Kodo.prototype = {
            constructor : Kodo,
            length : 0,
            splice : [].splice,
            selector : '',
            ele : {},
            className : '',
            idName : '',
            init : function(selector){
                if(selector){
                    if(selector.substring(0,1) === '#')               
                        this.ele = this.createrEleById(selector.substring(1,selector.length));
                    else if(selector.substring(0,1) === '.')
                        this.ele = this.createEleByClass(selector.substring(1,selector.length));
                }
                //console.log(this.ele);   

            },
            createrEleById : function(idName){
                this.idName = idName;
                this.length ++;
                return document.getElementById(idName);
            },
            createEleByClass : function(className){
                var classObj =  document.getElementsByClassName(className);
                this.className = className;
                this.length = classObj.length;
                return classObj;
            },
            toTrim : function(str){
                //去除字符串两端空格
                return str.replace(/(^\s*)|(\s*$)/g, ""); 
            },
            hasClass : function(cls){
                var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
                for(var i = 0;i < this.length;i++){
                    if(this.ele[i].className.match(reg))
                        return true;
                }
                return false;
            },
            addClass : function(cls){
                var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
                for(var i = 0;i < this.length;i++){
                    if(!this.ele[i].className.match(reg))
                        //两类名中间需要使用空格进行隔开
                        this.ele[i].className += ' ' + cls;
                }
                return this;
            },
            removeClass : function(cls){
                //两种可能,一种可能是删除最原始的className,一种可能是删除新加的className
                var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
                for(var i = 0;i < this.length;i ++){
                    if(this.ele[i].className.match(reg)){
                        this.ele[i].className = this.ele[i].className.replace(' ' + cls,'');
                        if(this.className.match(reg)){
                            this.length --;i --;
                        } 
                    } 
                }
                return this;
            }
        }
        Kodo.prototype.init.prototype = Kodo.prototype;
        Kodo.prototype.ajax = function(){
            console.log('这里可以写ajax');
        }
        window.$ = Kodo;
        console.log($('.box').hasClass('box'),$('.box').hasClass('box1'));
        $('.box').addClass('box1').removeClass('box');
        //目前存在的bug在于无法连续的removeClass,以后有时间再考虑这个问题
    </script>
</body>
</html>

 

转载于:https://www.cnblogs.com/xiaohualu/p/10303895.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值