美文网首页前端学习笔记
简单模仿两个jQuery API

简单模仿两个jQuery API

作者: 还是流星拳比较好 | 来源:发表于2018-07-23 18:07 被阅读0次

这篇博客主要是使用DOM API进行封装模仿jQuery API的实现。在平常写代码时常常会发现DOM API在大多数情况下实现一个功能十分复杂,如果使用jQuery API就方便很多。现在我就来将DOM API进行简单封装,实现两个模仿jQuery的API,以下是全部代码:

window.jQuery = function(nodeOrSelector){
    let nodes = {}
    if(typeof nodeOrSelector === 'string'){
        nodes = document.querySelectorAll(nodeOrSelector)
    }else{
        nodes[0] = nodeOrSelector
        nodes.length = 1
    }
    nodes.addClass = function(classes){
        for(let i=0; i<nodes.length; i++){
            nodes[i].classList.add(classes)
        }
    }
    nodes.setText = function(contents){
        for(let i=0; i<nodes.length; i++){
            nodes[i].textContent = contents
        }
    }
    return nodes
}

window.$ = jQuery
var $div = $('div')
$div.addClass('red')
$div.setText('hi')

    首先我们先看代码的第一部分,jQuery是一个函数,这个函数接受一个参数(nodeOrSelector),这个参数可以是元素id也可以是选择器。在函数内部先声明一个nodes的内部变量,让其指向一个空对象。接下来将传入的参数进行判断,如果传入参数的类型是字符串(即传入参数为选择器),便可通过DOM API中的document.querySelectorAll()来获取选择器对应的全部节点所形成的伪数组,并将这个伪数组赋值给变量nodes;如果传入参数类型不是字符串(即传入参数为元素id),就直接将nodes第一项的值改为传入的参数(元素id),并设置好length的值为1。到此我们可获得nodes伪数组,方便我们接下来操作其中的节点元素。

window.jQuery = function(nodeOrSelector){
    let nodes = {}
    if(typeof nodeOrSelector === 'string'){
        nodes = document.querySelectorAll(nodeOrSelector)
    }else{
        nodes[0] = nodeOrSelector
        nodes.length = 1
    }

    接着我们来看一下代码的第二部分,先给nodes伪数组新增一个键值对,键名为addClass,值为一个匿名函数,匿名函数接受一个参数(classes)。此匿名函数主要作用是遍历nodes这个伪数组,给其中所储存的所有节点添加class属性(利用DOM API中的.classList.add()),属性值为参数classes

nodes.addClass = function(classes){
        for(let i=0; i<nodes.length; i++){
            nodes[i].classList.add(classes)
        }
    }

    代码的第三部分与第二部分类似,也是为nodes伪数组新增一个键值对,其中匿名函数的作用是遍历nodes这个伪数组,给其中所储存的所有节点添加文本内容(利用DOM API中的.textContent),文本内容为参数contents
    最后返回nodes这个伪数组。

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

在这里我使用到了闭包,以现在我的理解闭包是:函数内调用函数外所声明的变量,那这个函数与这个变量称作闭包。


    最后一部分的代码便是调用这个模仿jQuery的API的方法。值得注意的是:大部分jQuery使用者习惯使用$来表示jQuery,调用jQuery函数会返回nodes对象(伪数组),将这个对象赋值给一个变量时,此变量名前通常也加上$符号进行区分。

window.$ = jQuery
var $div = $('div')
$div.addClass('red')
$div.setText('hi')

相关文章

  • 简单模仿两个jQuery API

    这篇博客主要是使用DOM API进行封装模仿jQuery API的实现。在平常写代码时常常会发现DOM API在大...

  • 如何实现一个jQuery的api

    什么是jQuery 实现jQuery的api 实现jQuery的api说起来也很简单,就是对DOM进行封装。话不多...

  • 用原生DOM实现一个jQuery的API

    今天第一次接触jQuery,先简单的实现一个jQuery的API,实现两个方法: addClass() setTe...

  • 实现一个 jQuery 的 API的过程

    今天要模仿jQuery来实现两个API,他们的功能是: 为选中的标签添加某个 class 将选中的标签的value...

  • jQuery 之 extend 方法使用

    方法介绍 jQuery 的 API 手册中,extend 方法挂载在 jQuery 和 jQuery.fn 两个不...

  • 简单模仿jQuery

    今天开始学习jQuery,理解其实现模式和大体思想,然后自己简单实现一些类jQuery功能,这样能更好地学习使用它...

  • 简易的jQuery

    @(Inbox) 本文会用最简单的形式来模仿jQuery源码。 jQuery看着是什么样子的? $(美元符号)是j...

  • 模拟jQuery简单API

    JQuery的主要功能:通过强大的选择器获得DOM元素,然后针将这些DOM元素的日常操作封装成对应的方法,如取值、...

  • 简单实现jQuery API

    具体的思路:1.封装一个函数,传入节点或者选择器字符串,可以返回伪数组,伪数组中包含获取到的dom元素==> 对函...

  • Jquery 中的get和post请求

    关于 JQuery 中的 get 和 post 请求,我在前面已经模仿过了,详情请见以下文章。函数API的封装,仿...

网友评论

    本文标题:简单模仿两个jQuery API

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