成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

遞歸檢索包含子串的所有文本節點的最快方法

開發 前端
本文將深入探討幾種檢索HTML元素中所有子文本節點的方法,并通過性能測試找出最優解。

在Web開發中,高效檢索文本節點對于實現關鍵詞高亮等功能至關重要,尤其是在處理動態加載內容的頁面時。本文將深入探討幾種檢索HTML元素中所有子文本節點的方法,并通過性能測試找出最優解。

檢索方法概述

  1. 使用childNodes遞歸
  2. TreeWalker
  3. NodeIterator
  4. document.evaluate()配合XPath

性能測試

測試代碼基于一個由多個流行網站HTML代碼組合而成的樣本文檔。以下是幾種主要的檢索方法實現:

// childNodes遞歸
function recursiveChildNodes(el) {
    var nodes = [];
    function traverse(el) {
        for (var i = 0; i < el.childNodes.length; i++) {
            var node = el.childNodes[i];
            if (node.nodeType == Node.TEXT_NODE) {
                nodes.push(node);
            } else traverse(node);
        }
    }
    traverse(el);
    return nodes;
}

// TreeWalker
function useTreeWalker(el) {
    const walker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT);
    const nodes = [];
    while (walker.nextNode()) nodes.push(walker.currentNode);
    return nodes;
}

// NodeIterator
function useNodeIterator(el) {
    const iterator = document.createNodeIterator(el, NodeFilter.SHOW_TEXT);
    const nodes = [];
    let node;
    while (node = iterator.nextNode()) nodes.push(node);
    return nodes;
}

// XPath
function useXPath(el) {
    let iterator = document.evaluate("http://text()", el, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE);
    const nodes = [];
    let node;
    while (node = iterator.iterateNext()) nodes.push(node);
    return nodes;
}

測試結果顯示,TreeWalker、NodeIterator和XPath方法的性能相近,均比基于childNodes的遞歸方法快約5倍。

包含特定子串的文本節點檢索

對于需要查找包含特定子串的文本節點,比較了兩種方法:

  1. 使用TreeWalker獲取所有文本節點后過濾
  2. 直接使用XPath表達式查找包含特定字符串的文本節點
// TreeWalker + 過濾
function treeWalkerWithFilter(el, text) {
    const walker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT);
    const nodes = [];
    while (walker.nextNode()) {
        if (walker.currentNode.nodeValue.includes(text)) {
            nodes.push(walker.currentNode);
        }
    }
    return nodes;
}

// XPath直接查找
function xpathDirectSearch(el, text) {
    let iterator = document.evaluate(`//text()[contains(.,'${text}')]`, el, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE);
    const nodes = [];
    let node;
    while (node = iterator.iterateNext()) nodes.push(node);
    return nodes;
}

測試結果表明,使用TreeWalker獲取所有節點后再過濾的方法比直接使用XPath條件查詢更快。

結論與最佳實踐

  1. 對于檢索所有嵌套文本節點,document.createTreeWalker()和document.createNodeIterator()是最佳選擇。
  2. 當需要查找包含特定子串的文本節點時,先使用TreeWalker獲取所有文本節點,然后進行過濾是更高效的方法。

這些優化技巧對于實現高性能的文本搜索和高亮功能尤為重要,特別是在處理大型、復雜的Web應用時。通過選擇合適的方法,可以顯著提升頁面的響應速度和用戶體驗。

責任編輯:姜華 來源: 大遷世界
相關推薦

2011-08-18 13:31:44

SQL Server數子節點查詢所有父節點

2022-03-22 07:51:45

JS父節點

2025-02-21 15:43:29

slotredis集群

2017-12-18 10:12:48

LinuxShell命令

2021-11-24 09:43:11

grepLinux文件

2020-08-17 09:22:30

字符串子串對象

2023-11-03 08:08:00

MySQL子節點

2010-11-09 12:09:23

SQL Server查

2018-02-28 13:20:40

Python解壓zip

2011-04-06 16:05:29

SQL Server數據導入

2024-07-22 15:42:08

Linux字符串

2009-03-22 19:19:15

多核多核服務器多核歷史

2011-05-07 17:03:15

打印機

2014-11-17 09:51:39

PHP

2015-08-07 10:02:34

Java線程池遞歸

2022-06-28 07:40:54

JVM線程開源

2010-10-29 16:48:30

oracle查詢所有表

2022-06-06 13:37:51

云計算首席執行官SaaS

2011-07-08 09:07:11

JavaScript

2023-06-01 17:10:12

HTMLJavaScript
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美在线a| 亚洲二区在线观看 | 日本成人片在线观看 | 视频一二三区 | 国产高清视频在线 | 亚洲视频一区二区三区 | 国产精品久久二区 | 欧美成人激情视频 | jav成人av免费播放 | 久久一| 一区二区三区四区在线免费观看 | 久久国产精品99久久久久久丝袜 | 亚洲精品一区在线观看 | 在线看亚洲 | 国产成都精品91一区二区三 | 玖玖在线免费视频 | 一区二区中文字幕 | 国产精品1区2区 | 波多野结衣av中文字幕 | 成年视频在线观看福利资源 | 四虎影院在线免费观看 | 精品一区二区在线观看 | 亚洲a在线观看 | 欧美精品免费观看二区 | 亚洲精品免费在线观看 | 中文av网站 | 精品中文字幕一区二区三区 | 免费成人在线网 | 亚洲国产一区二区三区在线观看 | 亚洲久久一区 | 中文字幕国产视频 | 成人精品福利 | 日韩视频在线一区二区 | 亚洲在线中文字幕 | 亚洲精品电影网在线观看 | 精品国产高清一区二区三区 | 国产精品久久久久久久岛一牛影视 | 日本在线黄色 | 国产亚洲精品综合一区 | 黄网站免费在线 | 成人一区二区三区在线观看 |