function traverseNodes()

in media/src/components/common/Searcher.tsx [47:78]


      function traverseNodes(node: Node) {
        // 如果是文本节点
        if (node.nodeType === Node.TEXT_NODE) {
          const textContent = node.textContent || "";
          const index = textContent?.toLocaleLowerCase()?.indexOf(searchTerm?.toLocaleLowerCase());

          if (index !== -1) {
            const span = document.createElement("span");
            span.style.backgroundColor = "yellow";
            span.style.color = "#59636E";
            span.textContent = textContent.substring(index, index + searchTerm.length); // 高亮的文本
            span.id = "highlighted-text";
            matchDoms.push(span);

            // 创建一个新的文本节点,包含高亮部分和其他部分
            const beforeText = document.createTextNode(textContent.substring(0, index));
            const afterText = document.createTextNode(textContent.substring(index + searchTerm.length));

            // 替换当前的文本节点
            const parent = node.parentNode;
            if (parent) {
              parent.insertBefore(beforeText, node);
              parent.insertBefore(span, node);
              parent.insertBefore(afterText, node);
              parent.removeChild(node);
            }
          }
        } else {
          // 除文本节点外,递归遍历子节点
          node.childNodes.forEach(traverseNodes);
        }
      }