简单模仿两个jQuery API

这篇博客主要是使用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')
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,765评论 1 45
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,342评论 0 3
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,202评论 0 1
  • 你说:以后要好好学习,将来才能成器。 我问:什么叫“成器”? 你说:就是以后有出息。 我问:什么样才叫有出息? 你...
    遺釋悟塵阅读 180评论 0 1
  • 很长一段时间无人理财,也无人关心。 感觉收到了冷落。有失落,有不平。但清醒下来终归要回归本质,做好本职。 坚定执着...
    Woody是多么的寂寞阅读 153评论 0 0