当前位置:首页 > JavaScript

js手动实现getelementbyid

2026-03-15 16:05:38JavaScript

手动实现 getElementById 的方法

递归遍历 DOM 树

通过递归遍历 DOM 树的每个节点,检查节点的 id 属性是否匹配目标值。如果找到匹配的节点,立即返回该节点;否则继续遍历子节点。

js手动实现getelementbyid

function getElementById(root, id) {
  if (root.id === id) {
    return root;
  }

  for (let child of root.children) {
    const found = getElementById(child, id);
    if (found) {
      return found;
    }
  }

  return null;
}

使用 BFS(广度优先搜索)

采用队列实现广度优先搜索,逐层遍历 DOM 树,直到找到目标节点。

js手动实现getelementbyid

function getElementById(root, id) {
  const queue = [root];

  while (queue.length > 0) {
    const node = queue.shift();
    if (node.id === id) {
      return node;
    }

    for (let child of node.children) {
      queue.push(child);
    }
  }

  return null;
}

使用 DFS(深度优先搜索)的非递归实现

通过栈实现深度优先搜索的非递归版本,避免递归可能导致的堆栈溢出问题。

function getElementById(root, id) {
  const stack = [root];

  while (stack.length > 0) {
    const node = stack.pop();
    if (node.id === id) {
      return node;
    }

    for (let i = node.children.length - 1; i >= 0; i--) {
      stack.push(node.children[i]);
    }
  }

  return null;
}

注意事项

  1. 性能考虑:递归实现可能在 DOM 树很深时导致堆栈溢出,非递归的 BFS 或 DFS 更安全。
  2. 兼容性:手动实现通常用于理解原理,实际开发中应优先使用原生 document.getElementById
  3. 扩展性:可以进一步优化算法,例如支持动态加载的 DOM 节点。

示例调用

const rootElement = document.documentElement;
const targetElement = getElementById(rootElement, 'myId');
console.log(targetElement);

分享给朋友:

相关文章

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promise…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…

js实现 拖动

js实现 拖动

实现拖动的步骤 HTML 结构 创建一个可拖动的元素和一个放置区域: <div id="draggable" draggable="true">拖动我</div> <d…