封装$函数

封装类JQuery。

        
        function $(selector){
            var jq = new JQuery(selector);
            return jq;
        }
        function JQuery(selector){//定义类
            this.elements = [];

判断类型,如果传的是字符串,判断是否为'#' '. '和标签选择器,如果是的话就将其push到elements的数组里。

            if(typeof selector == 'string'){
                var str = selector.substr(1);
                if(selector.indexOf('#') != -1){
                    this.elements.push(document.getElementById(str));
                }else if(selector.indexOf('.') != -1){
                    if(document.getElementsByClassName){
                        this.elements = document.getElementsByClassName(str);
                    }else{
                        // var result = [];
                        var nodes = document.getElementsByTagName('*');
                        for(var i=0; i<nodes.length; i++){
                            if(nodes[i].className == str){
                                this.elements.push(nodes[i]);
                            }
                        }
                        // return result;
                    }
                }
            }

如果是函数就是文档就绪函数, window.onload = selector,在crome里用addEventListener('load', selector, false);,ie里用 window.attachEvent('onload', selector);,

else if(typeof selector == 'function'){
                // window.onload = selector;
                if(window.addEventListener){
                    window.addEventListener('load', selector, false);
                }else if(window.attachEvent){
                    window.attachEvent('onload', selector);//document.readyState
                }
            }
如果调用的是类下的方法on 就直接给元素添加事件就可以
        this.on = function(eventtype, handler){
            for(var i=0; i<this.elements.length; i++){
                this.elements[i].addEventListener(eventtype, handler, false);
            }
            return this;
        };

如果调用的是css方法,有两种形式,
一种是this.css({
background:'red'
})
第二种直接为this.css('background','red'),所以我们要判断第二个参数是否为undefine,来判断是哪种格式


            this.css = function(prop1, prop2){
                if(prop2 == undefined){
                    //这时prop1是一个对象
                    // {
                    //  background : '#0f0',
                    //  border : '1px solid #000'
                    // }    
                    for(var p in prop1){
                        for(var i=0; i<this.elements.length; i++){
                            this.elements[i].style[p] = prop1[p];
                        }
                    }
                }else if(prop2 != undefined){
                    for(var i=0; i<this.elements.length; i++){
                        this.elements[i].style[prop1] = prop2;
                    }
                }
                return this;
            };
        } 

有个很重要的一点,为了保持链式操作 在每个方法后面返回this

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容