js 通過H2,H3生成文章目錄結構

markdown寫的文章,沒有生成目錄結構功能,自己手動寫個,DOM節點如下:
本文章只是針對H2,H3的標籤的事例(h1~h6只能有個2個標籤即可)

在這裏插入圖片描述

  • 獲取節點
 let childrens = document.getElementsByClassName("v-show-content")[0].children,
     treeArray = [];
  • 過濾H2 H3的標籤
        for (let i = 0; i < childrens.length - 1; i++) {
          console.info("childrens[i]-打印看下面圖片", childrens[i]);
          let nodeName = childrens[i].nodeName;
          if (nodeName == "H2" || nodeName == "H3") {
            treeArray.push({
              id: childrens[i].childNodes[0].getAttribute("id"),
              name: childrens[i].innerText,
              tag: childrens[i].nodeName
            });
          }
        }

在這裏插入圖片描述

  • 改變數據 h2 和 h3

就是前後2個比較,小標籤是大標籤子集


        // 獲取標題級別
        function getLevel(str = "") {
          const result = str.slice(-1);
          return Number(result);
        }

        function format(list) {
          const result = [];
          let prevItem;

          list.forEach(item => {
            if (!prevItem) {
              result.push(item);
              prevItem = item;
              return;
            }

            const level = getLevel(item.tag);
            const prevLevel = getLevel(prevItem.tag);
            // 比較級別大小
            const isSmall = level > prevLevel; // 注意大小判斷 2 > 3
            if (isSmall) {
              prevItem.list = prevItem.list || [];
              prevItem.list.push(item);
            } else {
              result.push(item);
              prevItem = item;
            }
          });
          return result;
        }

        const newTreeArray = format(treeArray);

我的博客文章詳情有例子: http://www.zhooson.cn/article

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章