美文网首页饥人谷技术博客
实现一个简单的jQuery

实现一个简单的jQuery

作者: si_月 | 来源:发表于2018-08-05 20:16 被阅读6次

jQuery说到底是一个函数对象,一个通过原生js实现了某些功能的函数,被封装成了一个js对象。jQuery对象是类似{0:xx,1:xx,length:2,····}的伪数组,知道原理后,我们自己也可以实现一个简单的jQuery
需求:实现简单的获取元素,增加class类,以及修改元素文本的功能。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>一个简单的jQuery</title>
</head>
<style>
  .red{
    color:red;
  }
  .green{
    color:green;
  }
</style>
<body>
  <ul>
    <li class="item1">第1项</li>
    <li class="item2">第2项</li>
    <li class="item3">第3项</li>
    <li class="item4">第4项</li>
  </ul>
</body>
</htmnl>

首先,通过原生JS实现上述功能

//获取所有的li元素
var items = document.querySelectorAll('li');
//为所有的li增加red类
for (let i = 0; i < items.length; i++) {
  items[i].classList.add('red');
}
//修改所有的li文本
for (let i = 0; i < items.length; i++) {
  items[i].textContent = 'hi';
}

封装这两个函数

var items = document.querySelectorAll('li');

function addClass(e){
  for (let i = 0; i < items.length; i++) {
    items[i].classList.add(e);
  }
}
addClass('red');

function setText(e){
  for (let i = 0; i < items.length; i++) {
    items[i].textContent = e;
  }
}
setText('hi');

将上面的对象及方法封装成一个对象,并对空间命名

var node = {};
var items = document.querySelectorAll('li');
node.length = items.length;
for (let i = 0; i < items.length; i++) {
  node[i] = items[i];
}

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

node.setText = function (e){
  for (let i = 0; i < node.length; i++) {
    node[i].textContent = e;
  }
}

node.addClass('red')
node.setText('hi')

把node对象也封装进去,使它变成一个函数对象,更像jQuery

window.jQuery = function (nodeorselector){
  var node = {};

  var items = document.querySelectorAll(nodeorselector);

  node.length = items.length;

  for (let i = 0; i < items.length; i++) {
    node[i] = items[i];
  }

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

  node.setText = function (e){
    for (let i = 0; i < this.length; i++) {
      this[i].textContent = e;
    }
  }

  return ndoe;
}

var $li = jQuery('li');
$li.addClass('red');
$li.setText('hi');

最后,console.log($li)可以看到一个如图所示的伪数组,有addClass方法与setText方法,jQuery本质也是如此,便可以对jQuery有更深的认识。

$li实际上是一个对象

相关文章

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

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

  • JQuery 的元素选择器的实现原理

    jQuery源码的结构 下面是模拟jQuery实现简单的获取元素内容 结论 所以,JQuery 其实就是在一个匿名...

  • 如何实现一个jQuery的api

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

  • JQuery简单实现

    将jQuery封装成一个函数,先获取所有标签,直接返回一个对象,对象当中有两个函数:addClass和setTex...

  • 用 jQuery 做个轮播

    初次体验jQuery 之后,体验一下jQuery强大之处,做一个简单的轮播,实现图片切换。 点击按钮切换轮播 页面...

  • 实现一个简单的jQuery

    jQuery说到底是一个函数对象,一个通过原生js实现了某些功能的函数,被封装成了一个js对象。jQuery对象是...

  • 实现一个简单的jQuery

    首先 要实现的两个功能addClass和setText 首先,我们要对jQuery进行封装,首先选中一个dom元素...

  • 实现一个自制jQuery框架

    实现一个自制jQuery框架 理解jquery jquery常用方法如下 那么要要实现jquery从什么入手呢? ...

  • jquery实现页面内链接锚点跳转平滑滚动效果

    jQuery下实现锚点链接的平滑滚动(带浮动侧边栏)css+html+js JQuery实现简单的平滑过渡效果 J...

  • jQuery结构简析

    本文简单实现jQuery框架,深入理解javascript对象。本文的对照版本是jQuery-1.2.6.js 本...

网友评论

    本文标题:实现一个简单的jQuery

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