美文网首页
实现一个 jQuery 的 API

实现一个 jQuery 的 API

作者: 饥人谷_ika0s | 来源:发表于2019-08-27 15:29 被阅读0次

    这个api的功能:

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

    1.先搭出总体结构,对传入参数进行类型判断,无论传入的是选择器还是node节点,都返回一个对象

    window.jQuery = function(nodesOrSelector) {
          let nodes = {};
          if(typeof nodesOrSelector==='string'){//如果传入的是选择器
              nodes=document.querySelectorAll(nodeOrSelector);
          }else if((nodesOrSelector instanceof Node)){//如果传入的是node节点
              nodes={'0':nodesOrSelector,'length':1}
          }
          nodes.addClass = function(classes) {};
          nodes.setText = function(text) {};
          return nodes
        };
    window.$ = jQuery;
    

    2.两个功能的实现

     window.jQuery = function(nodesOrSelector) {
          let nodes = {};
          if (typeof nodesOrSelector === "string") {
            //如果传入的是选择器
            nodes = document.querySelectorAll(nodesOrSelector);
          } else if (nodesOrSelector instanceof Node) {
            //如果传入的是node节点
            nodes = { '0': nodesOrSelector, 'length': 1 };
          }
          nodes.addClass = function(classes) {
            //两层循环,外层遍历node,每次遍历给node添加所有的class,所以加一个内循环,遍历class
            for (let i = 0; i < nodes.length; i++) {
              classes.forEach(value => {
                nodes[i].classList.add(value);
              });
            }
          };
          nodes.setText = function(text) {
            for (let i = 0; i < nodes.length; i++) {
              nodes[i].textContent = text;
            }
          };
          return nodes;
        };
    

    可以看到每个div的颜色变成了红色,里面也添上了文字


    完整代码如下

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8" />
        <title>JS Bin</title>
      </head>
      <style>
        div {
          width: 50px;
          height: 30px;
          margin-bottom: 10px;
          background-color: blue;
        }
        .red {
          background-color: red;
        }
      </style>
      <body>
        <div></div>
        <div></div>
      </body>
      <script>
        window.jQuery = function(nodesOrSelector) {
          let nodes = {};
          if (typeof nodesOrSelector === "string") {
            //如果传入的是选择器
            nodes = document.querySelectorAll(nodesOrSelector);
          } else if (nodesOrSelector instanceof Node) {
            //如果传入的是node节点
            nodes = { 0: nodesOrSelector, length: 1 };
          }
          nodes.addClass = function(classes) {
            //两层循环,外层遍历node,每次遍历给node添加所有的class,所以加一个内循环,遍历class
            for (let i = 0; i < nodes.length; i++) {
              classes.forEach(value => {
                nodes[i].classList.add(value);
              });
            }
          };
          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");
      </script>
    </html>
    

    相关文章

      网友评论

          本文标题:实现一个 jQuery 的 API

          本文链接:https://www.haomeiwen.com/subject/kgueectx.html