初探jQuery

实现一个jQuery的API
  • 传一个选择器或节点
window.jQuery = 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
    }
  • 为nodes添加类,并且遍历nodes
  nodes.addClass = function(classes) {
     var classes = [classes] 
      classes.forEach((value) => {
        for (let i = 0; i < nodes.length; i++) { 
          nodes[i].classList.add(value)
        }
      })
    }
  • 遍历nodes,并且改变类的文本
  nodes.setText = function(text) {
    for (let i = 0; i < nodes.length; i++) { 
      nodes[i].textContent =text
    }
  }
  return nodes
}
  • 调用API操作nodes
window.$ = jQuery
var $div = $('div') 
$div.addClass('red') // 可将所有 div 的 class 添加一个 red
$div.setText('hi') // 可将所有 div 的 textContent 变为 hi
</script>
完整代码
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>

<body>
  <div id="a">red</div>
  <div id="b">red</div>
  <div id="c">red</div>
  <div id="d">red</div>
  <div id="e">red</div>
</body>
</html>

<script>
window.jQuery = function(nodeOrSelector) {
  let nodes = {}      //用nodes把节点和选择器都装起来
  if (typeof nodeOrSelector === "string") {  //判断一下nodeOrSelector是节点还是一个选择器
    let temp = document.querySelectorAll(nodeOrSelector)
    for (let i = 0; i < temp.length; i++) {   //遍历所有的节点并且把它们都添加到nodes里
      nodes[i] = temp[i]     
    }
    nodes.length = temp.length
  } else if (nodeOrSelector instanceof Node) {
    nodes = {
      0: nodeOrSelector,
      length: 1
    }
  }

  nodes.addClass = function(classes) {
     var classes = [classes] 
      classes.forEach((value) => {
        for (let i = 0; i < nodes.length; i++) {   //遍历nodes
          nodes[i].classList.add(value)
        }
      })
    }
  
  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 的 class 添加一个 red
$div.setText('hi') // 可将所有 div 的 textContent 变为 hi
</script>
  
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,288评论 19 139
  • 一、样式篇 第1章 初识jQuery (1)环境搭建 进入官方网站获取最新的版本 http://jquery.co...
    凛0_0阅读 3,536评论 0 44
  • DOM创建节点及节点属性 通过JavaScript可以很方便的获取DOM节点,从而进行一系列的DOM操作。但实际上...
    阿r阿r阅读 1,056评论 0 9
  • 黄小海_9cbe阅读 104评论 0 0
  • 翻开自己未完成的任务,觉得自己把自己逼得太紧。有时候累的无力吐槽,但还得继续学习,有时感慨自己何必了?每天都在阅读...
    兜兜布布阅读 194评论 0 0