越努力,越幸运,做个ccode~

0%

初步理解jQuery

封装addClass函数

function addClass(node,classes) {
    classes.forEach( (value) => node.classList.add(value) )
}
let divNode = document.getElementById('xxx')
addClass(divNode,['a','b','c'])

命名空间

> 如果别人也写了addClass这个函数,就会重复,所以需要命名空间

    window.xiaoyu = {}
    xiaoyu.addClass = function(node,classes) {
        classes.forEach( (value) => node.classList.add(value) )
    }

    let divNode = document.getElementById('xxx')
    xiaoyu.addClass(divNode,['a','b','c'])

能不能把node放在前面

方法一 扩展node接口

Node.prototype.addClass = function(classes){
    classes.forEach( (value) => this.classList.add(value) )
}

let divNode = document.getElementById('xxx')
divNode.addClass(['a','b','c'])

方法二 返回一个新的node对象

function newNode(node){
    newNode = {
        0: node,
        length: 1,
    }
    newNode.addClass = function(classes){
        classes.forEach( (value) => this.classList.add(value) )
    }
    return newNode
}

let divNode = document.getElementById('xxx')
let newnode = newNode(divNode)
newnode.addClass(['a','b'])

给生成newNode对象的函数改个名字吧

function jQuery(node){
    newNode = {
        0: node,
        length: 1,
    }
    newNode.addClass = function(classes){
        classes.forEach( (value) => this.classList.add(value) )
    }
    return newNode
}

window.$ = jQuery
let divNode = document.getElementById('xxx')
let $newnode = $divNode)
$newnode.addClass(['a','b'])

让这个参数可以接收selector,以及元素结点

window.jQuery = function(nodeOrSelector){
    if(typeof nodeOrSelector === 'string'){
        temp = document.querySelectorAll(nodeOrSelector)
            var nodes = {}
        for(var i=0;i<temp.length;i++){
            nodes[i] = temp[i]
        }
        nodes.length = temp.length
    }else{
        console.log(2)
            nodes = {
                0: nodeOrSelector,
                length: 1
            }
    }

    // 参数可以不为数组
    nodes.addClass = function(){
        let classes = []
        for(let i=0;i<arguments.length;i++){
            classes.push(arguments[i])
        }
        classes.forEach((value)=> {
            for(let i=0;i<nodes.length;i++){
                nodes[i].classList.add(value)
            }
        })
    }

    // 获取文本或设置文本内容
    nodes.text = function(text){
        if(typeof text === 'undefined'){
            let texts = []
            for(let i=0;i<nodes.length;i++){
                texts.push(nodes[i].textContent)
            }
            return texts
        }
        else{
            for(let i=0;i<nodes.length;i++){
                nodes[i].textContent = text
            }
        }
    }

    return nodes
}

window.$ = jQuery
let $div = $('div')

$div.addClass('a','b')
$div.text('hello jquery')