美文网首页
08-模拟jQuery实现两个需求

08-模拟jQuery实现两个需求

作者: 陈光展_Gz | 来源:发表于2019-04-14 13:54 被阅读0次

一、需求如下


window.jQuery = ???
window.$ = jQuery

var $div = $('div')
$div.addClass('red') // 可将所有 div 的 class 添加一个 red
$div.setText('hi') // 可将所有 div 的 textContent 变为 hi

题目中要求将所有 div 的 class 添加一个 red,以及将所有 div 的 textContent 变为 hi。

二、解决思路


  • jQuery本质就是一个构造函数然后接受一个参数(这个参数可能是节点)并返回一个nodes对象
  • 首先我们要能用var $div = $('div')获取到所有 div 。
window.jQuery = function (nodeOrSelector){
  let nodes = {}
  if(typeof nodeOrSelector === 'string'){
  var 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 = {o: nodeOrSelector,length = 1}
    }
  return nodes
  }
window.$ = jQuery
  • 此时,var $div = $('div')中的$div 就是上述代码中的 nodes,是一个 value 为所有 div 的伪数组。而且,nodes 需要 return 出去,才能被外面的代码调用。
    $div.addClass('red')可将所有 div 的 class 添加一个 red,$div.setText('hi')可将所有 div 的 textContent 变为 hi,我们给 nodes 添加两个 hash ,即,名为 addClass 和 setText 的函数
nodes.addClass = function(){
 
}
nodes.setText = function(){
 
}

三、完整代码


window.jQuery = function (nodeOrSelector){
  var nodes = {}
  if(typeof nodeOrSelector === 'string'){
  var 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 = {o: nodeOrSelector,length: 1}
  }
  nodes.addClass = function(classes){
    for(let i = 0; i < nodes.length; i++){
      nodes[i].classList.add(classes)
    }
  }
  nodes.setText = function(text){
    for(let i = 0; i < nodes.length; i++){
    nodes[i].textContent  = text
    }
  }
  return nodes
}
window.$ = jQuery
var $div = $('div')
$div.addClass('red') 
$div.setText('hi')

四、总结


  • 在我看来jQuery就是将一个DOM对象重新包装成jQuery对象,这个jQuery对象中包含了许多DOM中不能轻松实现的方法(函数),可以省去很多复杂的代码。
  • jQuery的基本设计思想和主要用法,就是"选择某个网页元素,然后对其进行某种操作"。
  • 使用jQuery的第一步,往往就是将一个选择表达式,放进构造函数jQuery()(简写为$),然后得到被选中的元素。
  • 首先,声明一个全局函数jQuery,函数通过传参数,通过判断参数的类型及参数是否为节点元素来获取对应的nodes,函数里写有addClass方法和setText方法。
  • .addClass方法通过传参数(样式的className),遍历所有nodes并加上提供的class类
  • .setText方法,把文本内容当作参数传递到函数中,遍历所有的nodes并通过textContent属性改变标签的文本内容

相关文章

  • 08-模拟jQuery实现两个需求

    一、需求如下 题目中要求将所有 div 的 class 添加一个 red,以及将所有 div 的 textCont...

  • 模拟jQuery实现

    目的:实现两个函数:addClass和setText. 我们首先把自己模拟jQuery的库封装好。

  • 初探jQuery

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

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

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

  • 模拟jQuery实现原理

    jQuery实质上就是一个构造函数,接受一个参数,这个参数可能是节点,然后返回一个方法对象是操作节点。 大概模拟下...

  • 2018-08-22

    实现JQuery之API 1.需求分析window.jQuery = ???window.div = div.ad...

  • Vue中使用jquery

    在vue项目中,需要实现某些特定的功能时,使用mvvm模式不易实现。因此引入jquery包来完成需求 jquery...

  • jQuery中缓存函数分析

    若有不妥,请多指教 模拟jQuery的缓存实现 这个函数更容易理解,但是不简洁看懂这个函数后,jQuery中的缓存...

  • jQuery Ajax上传文件

    模拟前台html页面 1.jQuery插件AjaxFileUpload用来实现ajax文件上传 2.通过jQuer...

  • 模拟 jQuery API的实现

    jQuery 是什么? jQuery实质上是一个构造函数,接受一个参数,这个参数可能是节点,然后返回一个方法对象去...

网友评论

      本文标题:08-模拟jQuery实现两个需求

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