定制化jq

69 阅读1分钟

jQuery源码第一行到最后一行是一个匿名函数

(function(){
    ...
})()

()括起来的目的 是把()内部的代码解释成一个表达式

思路:$('.div1')返回一个元素对象

元素对象里面有一个css方法 可以通过传参 改变$('.div1')的样式

元素也是一个对象 也可以添加属性和值

(function(){
    function $(element){
       let ele = document.querySelector(element)
        /* 思路:$('.div1')返回一个元素对象 
        元素对象里面有一个css方法 可以通过传参 改变$('.div1')的样式 */
        /* 元素也是一个对象 也可以添加属性和值 */
        ele.css = function(key,value){
            this.style[key] = value;
        }

        ele.show = function(){
            this.style.display = 'block';
        }

        ele.hide = function(){
            this.style.display = 'none';
        }
        ele.addClass = function(className){
            /* 原生的className会覆盖之前的类名 */
            this.className = this.className + ' ' +className;
        }
        ele.removeClass = function(className){
            this.className = this.className.replace(className,'')
        }

        ele.click = function(callback){
            this.onclick = callback;
        }

        /* 实现jq的 addClass removeClass 方法 */
        return ele;
    }
    /* 把局部的方法$ 挂载到window上变成全局的 
    就可以使用了 */
    window.$ = $;
})

原生转成jq对象

let h1 = document.querySelector('h1')

console.log( $(h1).get(0) )

/* jq对象转原生的方法 */

    /* 第一种 $('h1')[0] */

第二种

使用$('h1').get(0)方法 可以把单个的jq元素转成原生dom对象