实现一个 jQuery 的 API

两个要点,
1.$(xxx) 首先要判断xxx的类型,如果是节点类型,直接赋值就好了,如果是节点的集合就需要遍历来放入使用,
2.在将setText 和 getText 合并的时候,可以直接判断传入参数的类型为 undefined 那么就是获取text

大胆猜测一下,jQ的链式操作可能就是在方法的末尾返回了this。如下面的代码可以进行 $(xxx).addClass('xxx').addClass('xxxxx')

jsbin

window.jQuery = function (nodeOrSelector) {
  let node = {}
  if (typeof nodeOrSelector === 'string') {
    const list = document.querySelectorAll(nodeOrSelector)
    list.forEach((item, index) => {
      node[index] = item
    })
    node.length = list.length
  } else {
    node[0] = nodeOrSelector
    node.length = 1
  }
  return {
    node,
    addClass (className) {
      for (let i=0;i<node.length;i++) {
        node[i].classList.add(className)
      }
      return this
    },
    text (text) {
      if (text === undefined) {
        let texts = []
        for (let i=0;i<node.length;i++) {
          texts.push(node[i].textContent)
        }
        return texts
      } else {
        for (let i=0;i<node.length;i++) {
          node[i].textContent = text
        }
      }
    }
  }
}
window.$ = window.jQuery
console.log($('.div'))
$('.div').addClass('sss').addClass('ssss')
console.log($('.div').text())

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