如何写一个jQuery的API

如何实现以下代码

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

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

1、此函数接受一个参数,这个参数可能是node节点或者是选择器

window.jQuery = function (nodeOrSelector){}

2、判断参数nodeOrSelector是字符串还是一个节点,如果是字符串,找到对应的所有元素,放到伪数组nodes里面;如果是节点,把节点放到伪数组nodes里面,return nodes,封装成一个伪数组nodes

window.jQuery = function (nodeOrSelector){
  let nodes
  if(typeof nodeOrSelector === 'string'){
    nodes = document.querySelectorAll(nodeOrSelector)
  }else if(nodeOrSelector instanceof Node){
    nodes = {0: nodeOrSelector, length: 1}
  } 
  return nodes
}

3、在nodes上加上API

nodes.addClass = function(){}
nodes.setText = function(){}

4、 因nodes不是一个元素,故需要遍历nodes

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
    }
  }

5、完整代码如下

window.jQuery = function (nodeOrSelector){
  let nodes
  if(typeof nodeOrSelector === 'string'){
    nodes = document.querySelectorAll(nodeOrSelector)
  }else if(nodeOrSelector instanceof Node){
    nodes = {0: 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')
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,341评论 0 3
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,748评论 1 45
  • 1、拉取镜像 2、查看 3 运行容器,设置了挂载卷,设置了3个暴露端口, 4、进入容器,并配置zookeeper ...
    6cc89d7ec09f阅读 3,502评论 2 0
  • 妈妈,睡着了,像是刚刚卸下一天的倦乏;睡着了,像是刚刚和膝下儿孙道别过晚安;睡着了,洁净消瘦的脸上现出和善与...
    林朝00阅读 425评论 0 0
  • 天气里湿漉漉的,还没下雨,不过快了。 早餐:菜粥+鸡蛋白 起了个大早,食堂的...
    一米六多妞阅读 294评论 0 0