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);
}
}