实现一个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.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(node[i].textContent)
      }
      return texts
    }else{
      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.text('hi') //将所有div的textContent变为hi

上述代码的实现过程:
  首先判断nodeOrSelector是不是字符串,
是: 在文档返回的nodeOrSelector元素列表赋值给变量temp,遍历temp,将temp传递给nodes;
否:nodeOrSelector拥有Node.prototype属性,将伪数组{0:nodeOrSelector;length:1}赋值给nodes

.addClass函数:传递一个classes参数,遍历它,将它的每个value通过nodes[i].classList.add(value)添加到标签上。
.text函数:传递一个text参数,判断是否为undefined,是(认定添加textContent):新定义一个空数组texts,遍历nodes,texts.push(node[i].textContent);否(认定获取textContent):遍历nodes,将其中的textContent赋值给text

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容