api文档

实现原理 简略版

jquery构造的对象前面加上 $

var $node = $('ul>li')

  1. window.jQuery = function(nodeOrSelector) {
  2. let nodes = {};
  3. if (typeof nodeOrSelector === 'string') {
  4. let temp = document.querySelectorAll(nodeOrSelector)
  5. for (let i = 0; i < temp.length; i++) {
  6. nodes[i] = temp[i]
  7. }
  8. nodes.length = temp.length
  9. } else if (nodeOrSelector instanceof Node) {
  10. nodes = {
  11. 0: nodeOrSelector,
  12. length: 1
  13. }
  14. }
  15. nodes.addClass = function(...classes) {
  16. classes.forEach(value=>{
  17. for(let i=0;i<nodes.length;i++){
  18. nodes[i].classList.add(value)
  19. }
  20. })
  21. }
  22. nodes.getText = function(){
  23. var texts = []
  24. for(let i=0;i<nodes.length;i++){
  25. texts.push(nodes[i].textContent)
  26. }
  27. return texts;
  28. }
  29. nodes.setText = function(text){
  30. for(let i=0;i<nodes.length;i++){
  31. nodes[i].textContent = text
  32. }
  33. }
  34. nodes.text = function(text){
  35. console.log(this)
  36. if(text){
  37. this.setText(text)
  38. }else{
  39. return this.getText();
  40. }
  41. }
  42. return nodes;
  43. }
  44. window.$ = jQuery
  45. var $div = $('div')
  46. $div.addClass('red')
  47. $div.setText('hi')

实现细节

  1. 构造函数实现:传入dom节点或选择器,返回伪数组对象,对象上可以进行节点的操作和获取

  2. 判断传入的是节点还是选择器,构造伪数组对象

    1. window.jQuery = function(nodeOrSelector) {
    2. let nodes = {};
    3. if (typeof nodeOrSelector === 'string') {
    4. let temp = document.querySelectorAll(nodeOrSelector)
    5. for (let i = 0; i < temp.length; i++) {
    6. nodes[i] = temp[i]
    7. }
    8. nodes.length = temp.length
    9. } else if (nodeOrSelector instanceof Node) {
    10. nodes = {
    11. 0: nodeOrSelector,
    12. length: 1
    13. }
    14. }
  1. 实现addClass方法
    1. nodes.addClass = function(...classes) {
    2. classes.forEach(value=>{
    3. for(let i=0;i<nodes.length;i++){
    4. nodes[i].classList.add(value)
    5. }
    6. })
    7. }
  1. 实现获取设置文本
    1. nodes.getText = function(){
    2. var texts = []
    3. for(let i=0;i<nodes.length;i++){
    4. texts.push(nodes[i].textContent)
    5. }
    6. return texts;
    7. }
    8. nodes.setText = function(text){
    9. for(let i=0;i<nodes.length;i++){
    10. nodes[i].textContent = text
    11. }
    12. }
    13. nodes.text = function(text){
    14. console.log(this)
    15. if(text){
    16. this.setText(text)
    17. }else{
    18. return this.getText();
    19. }
    20. }
  1. 给函数设置一个别名
    1. window.$ = jQuery
  1. 返回对象,调用方法
    1. var $div = $('div')
    2. $div.addClass('red')
    3. $div.setText('hi')