const getAttr = (node) => {
        const attribute = {};
        if (node.attributes?.length && node.nodeType === 1) {
          const attributes = { ...node.attributes };

          for (const key in attributes) {
            let k = attributes[key].nodeName;
            let v = attributes[key].nodeValue;
            Object.assign(attribute, { [k]: v });
          }
          return attribute;
        } else {
          return null;
        }
      };
      function dom2json(node) {
        node.obj = {};
        const { obj } = node;
        if (node.nodeType === 1) {
          // 非文本节点
          obj.tag = node.tagName.toLowerCase();
        }
        if (node.nodeType === 3 && node.data.trim() !== "") {
          // 文本节点
          obj.tag = "text";
          obj.content = node.data.trim();
        }

        if (getAttr(node)) {
          obj.attributes = getAttr(node);
        }

        const newArrNode = Array.from(node.childNodes).filter(
          (cnode) =>
            cnode.nodeType === 1 ||
            (cnode.nodeType === 3 && cnode.data.trim() !== "")
        );

        if (node.childNodes && newArrNode.length) {
          obj.children = [];
          // 符合情况的子节点
          newArrNode.forEach((cnode) => {
            obj.children.push(dom2json(cnode));
          });
        }

        return obj;
      }
      let p = dom2json(document.querySelector("#jsContainer"));
      console.log(JSON.stringify(p));