美文网首页
自己撸一个jQuery

自己撸一个jQuery

作者: 抱着熊喵啃什么 | 来源:发表于2018-04-22 22:41 被阅读12次

呐,来研究一下jQuery的实现原理,自己撸一个简单版的来一试究竟吧!

选取元素

按照我们使用jQuery的使用步骤来一步步研究实现,所以,第一步当然就是从选取元素开始了。

window.jQuery = function(nodeOrSelector) {
    let nodes = {};
    if (typeof nodeOrSelector === 'string') {
       nodes = document.querySelectorAll(nodeOrSelector) //获取伪数组
    } else if (nodeOrSelector instanceof Node) {
        // 为了保证都是伪数组统一操作方式
        nodes = {
            0: nodeOrSelector,
            length: 1
        }
    }
    return nodes
}

不过我们在通过nodelist = document.querySelectorAll(nodes)获取元素的时候会发现一点小问题,那就是获取到的伪数组原型链可能会有点复杂,所以在这里我们可以做一个小小的优化。

window.jQuery = function(nodeOrSelector) {
    let nodes = {};
    if (typeof nodeOrSelector === 'string') {
        let temp = document.querySelectorAll(nodeOrSelector) //获取伪数组
        for (let i = 0; i < temp.length; i++) {
            nodes[i] = temp[i]
        }
        nodes.length = temp.length
    } else if (nodeOrSelector instanceof Node) {
        // 为了保证都是伪数组统一操作方式
        nodes = {
            0: nodeOrSelector,
            length: 1
        }
    }
    return nodes
}

自定义API

实现addclass

window.jQuery = function(nodeOrSelector) {
    let nodes = {};
    if (typeof nodeOrSelector === 'string') {
        let temp = document.querySelectorAll(nodeOrSelector) //获取伪数组
        for (let i = 0; i < temp.length; i++) {
            nodes[i] = temp[i]
        }
        nodes.length = temp.length
    } else if (nodeOrSelector instanceof Node) {
        // 为了保证都是伪数组统一操作方式
        nodes = {
            0: nodeOrSelector,
            length: 1
        }
    }

    nodes.addClass = function(classes) {
        if (typeof classes === "string") {
            classes = classes.split(',')  //
        }
        Array.prototype.forEach.call(classes, (value) => {
            for (let i = 0; i < nodes.length; i++) {
                nodes[i].classList.add(value)
            }
        })
    }
    return nodes
}

实现setText

window.jQuery = function(nodeOrSelector) {
    let nodes = {};
    if (typeof nodeOrSelector === 'string') {
        let temp = document.querySelectorAll(nodeOrSelector) //获取伪数组
        for (let i = 0; i < temp.length; i++) {
            nodes[i] = temp[i]
        }
        nodes.length = temp.length
    } else if (nodeOrSelector instanceof Node) {
        // 为了保证都是伪数组统一操作方式
        nodes = {
            0: nodeOrSelector,
            length: 1
        }
    }

    nodes.addClass = function(classes) {
        if (typeof classes === "string") {
            classes = classes.split(',')  //
        }
        Array.prototype.forEach.call(classes, (value) => {
            for (let i = 0; i < nodes.length; i++) {
                nodes[i].classList.add(value)
            }
        })
    }

    nodes.setText = function(text) {
        for (let i = 0; i < nodes.length; i++) {
            nodes[i].textContent = text
        }
    }
    return nodes
}

实现快捷使用自定义库

window.$ = jQuery

相关文章

  • 自己撸一个jQuery

    呐,来研究一下jQuery的实现原理,自己撸一个简单版的来一试究竟吧! 选取元素 按照我们使用jQuery的使用步...

  • 2019-05-20

    花两个月时间学完了 thinkphp、jquery、bootstrap、sass,终于可以正式撸项目了,明天开始撸...

  • jQuery日历插件开发

    在jquery的学习中,经常碰到使用jQuery插件的使用,后来想着自己应该动手写一个jQuery插件,提高自己的...

  • 自己动手封装一个JQuery(简版)

    目标 通过对JQuery使用的分析,实现一个简版的自己的JQuery 先看一个JQuery的使用Demo 这个代码...

  • 封装一个自己的js库

    仿照jQuery封装一个自己的js库 接下来,我讲封装一个仿jQuery的库,主要包含jQuery中绑定,css,...

  • jQuery原理(自己封装一个jQuery)

    jQuery原理 1.来看一下jQuery自己的结构 (function( window, undefined )...

  • 自己撸一个StepView

    自定义StepViews就是模仿网上那个挺热门的一系列步骤的view(看了一下图片效果,自己尝试写一个,锻炼自己的...

  • 初探jQuery

    jQuery API的实现 自己模拟jQuery的一个API预览:http://js.jirengu.com/pa...

  • 01. jQuery 基础

    jQuery简介 jQuery是一个JavaScript库; jQuery下载地址http://jquery.co...

  • jQuery(一)_选择器

    jQuery(一)_选择器 1.jQuery简介 jQuery是一个JavaScript函数库。jQuery是一个...

网友评论

      本文标题:自己撸一个jQuery

      本文链接:https://www.haomeiwen.com/subject/fspflftx.html