饥人谷技术博客

手写jQuery的增删改查

2021-04-16  本文已影响0人  茜Akane

Get Started

链式风格

也叫jQuery风格,window.jQuery()是我们提供的全局函数。

特殊函数jQuery

jQuery(选择器)用于获得对应的元素,但却不返回这些元素。相反,它返回一个对象,称为jQuery构造出来的对象,这个对象可以操作对应元素。
jQuery使构造函数吗?

术语

举例

别名

链式风格下的增删改查

查.png
find(selector) {
  let array = [];
  // for (let i = 0; i < this.elements.length; i++) {
  //   // concat将括号里的数组与this相连成为伪数组
  //   array = array.concat(
  //     Array.from(this.elements[i].querySelectorAll(selector))
  //   );
  // }
  this.each((n) => {
    array.push(...n.querySelectorAll(selector));
  });
  array.oldApi = this; // this作为刚传进来的对象保存在oldApi里,return的是处理后的对象
  return jQuery(array);
},
parent() {
  const array = [];
  this.each((node) => {
    if (array.indexOf(node.parentNode) === -1) {
      // array存在父元素就不push
      array.push(node.parentNode);
    }
  });
  return jQuery(array);
},
children() {
  const array = [];
  this.each((node) => {
    array.push(...node.children); // ...展开操作符
  });
  return jQuery(array);
},

增.png
appendTo(node) {
  if (node instanceof Element) {
    this.each((el) => node.appendChild(el)) // 遍历 elements,对每个 el 进行 node.appendChild 操作
    console.log(node)
  } else if (node.jquery === true) {
    this.each((el) => node.get(0).appendChild(el)) // 遍历 elements,对每个 el 进行 node.get(0).appendChild(el))  操作
  }
},

删.png

改.png
addClass(className) {
  this.each((n) => n.classList.add(className))
  return this // 等价与return api,这里的this返回的是函数本身
},
上一篇下一篇

猜你喜欢

热点阅读