美文网首页
实现一个简单的“类jQuery”封装

实现一个简单的“类jQuery”封装

作者: qh0814 | 来源:发表于2019-03-27 23:00 被阅读0次

1.基本结构

jQuery是一个经典的JavaScript库,自出现一来就一直受到前端圈的喜爱。它封装了许多步骤,使用它能够在开发中极大地简化工作流程。尽管jQuery已经在慢慢淡出舞台,但jQuery的一些封装思想还是可以借鉴一下的。
我们知道,在jQuery中,常见的使用方法类似于这样

 $().function()

通过$()会返回一个jQuery对象,从而可以调用jQuery库中的方法。

window.$ = jQuery
var $div = $('div')
$div.__proto__ === jQuery.prototype  //true
$div[1] instanceof Node //true

可以看到,jQuery对象的原型是jquery.prototype,而返回jQuery对象是一个类数组,对象中各属性的值为普通的Node对象。

2.实现简化版的类jQuery

从上面了解到,大致上jQuery可以接受一个Node对象,实际上还可以接受string形式的选择器,然后通过输入的参数匹配到实际的DOM节点,然后返回一个jQuery对象,这样我们就可以通过该对象来进行各种操作了。返回的jQuery对象可以认为是普通Node对象的“升级版”,拥有更强大的方法,更灵活的操作空间。
分析完之后,实现起来就简单了:

window.jQueryLike = 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
      }
    }
    //批量写入class
    nodes.addClass = function (classes) {
      classes.forEach((value) => {
        for (let i = 0; i < nodes.length; i++) {
          nodes[i].classList.add(value)
        }
      })
    }
    
    //若参数为空则读取文本,若参数不为空则写入
    nodes.text = function (text) {
      if (text === undefined) {
        var 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  //返回一个类jQuery对象
  }

使用过程(代码片段):

<style>
    .red {
      color: red;
    }
  </style>
  <div class="div">1</div>
  <div class="div">2</div>
  <div class="div">3</div>
  <button id="toRed">red</button>
<script>
  window.$ = jQueryLike
  var $div = $('div')
  button = document.getElementById('toRed')
  button.onclick = function(){
  $div.addClass(['red'])
  }
</script>

效果:


相关文章

  • 实现一个简单的“类jQuery”封装

    1.基本结构 jQuery是一个经典的JavaScript库,自出现一来就一直受到前端圈的喜爱。它封装了许多步骤,...

  • 如何实现一个jQuery的api

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

  • web前端面试题-jQuery篇(持续更新...)

    1,JQuery的源码看过吗?能不能简单概况一下它的实现原理? jquery源码封装在一个匿名函数的自执行环境中,...

  • js实现jQuery的简单方法和链式操作

    我用这篇文章来理一理如何用js去实现封装jQuery的简单方法。 本文js实现了下面jquery的几种方法,我将它...

  • jQuery插件扩展

    一、jQuery的扩展性jQuery,除了对JavaScript进行封装让写法、功能实现更简单,特别是选择器抓取D...

  • 2019-01-06

    用 jQuery 简单封装两个小案例 jQuery 官网示例源码 手风琴 这里实现的只是横坐标方向的,考虑的情况不...

  • 类jQuery封装

    这种方式是我从 jQuery 那里学来的。 jQuery 对象具有很强的集成性,可以作为函数调用,也可以做为对象调...

  • 数据结构-数组

    通过二次封装创建属于自己的数组 创建一个Array类,实现一些简单的方法 这样就实现了一个数组的简单封装,接下来就...

  • jQuery 对象和原生 Dom 对象有什么区别?如何相互转换?

    jQuery对象与dom的区别jQuery对象是一个类数组的对象,对象原型中封装了许多jQuery自定义的方法。在...

  • Java设计模式-简单工厂模式

    Java设计模式-简单工厂模式 简单工厂模式(逻辑判断) 对实现同一个接口的类,我们可以使用一个工厂类来封装这些类...

网友评论

      本文标题:实现一个简单的“类jQuery”封装

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