当前位置:首页 > JavaScript

js 实现 parents

2026-03-02 07:59:53JavaScript

在 JavaScript 中,实现类似 jQuery 的 parents() 方法可以通过遍历 DOM 树来完成。以下是几种实现方式:

使用纯 JavaScript 实现 parents()

通过递归或循环遍历当前元素的父节点,直到根元素。

js 实现 parents

function parents(element, selector) {
  const parentsList = [];
  let current = element.parentNode;

  while (current && current.nodeType === 1) { // 1 表示元素节点
    if (!selector || current.matches(selector)) {
      parentsList.push(current);
    }
    current = current.parentNode;
  }

  return parentsList;
}

使用 Element.closest() 结合循环

如果需要匹配特定选择器的祖先元素,可以结合 closest 和循环实现。

function parents(element, selector) {
  const parentsList = [];
  let current = element.parentNode;

  while (current && current.nodeType === 1) {
    if (!selector || current.matches(selector)) {
      parentsList.push(current);
    }
    current = current.parentNode;
  }

  return parentsList;
}

使用递归实现

递归方式可以更简洁地遍历所有父级元素。

js 实现 parents

function parents(element, selector, result = []) {
  const parent = element.parentNode;
  if (!parent || parent.nodeType !== 1) return result;

  if (!selector || parent.matches(selector)) {
    result.push(parent);
  }
  return parents(parent, selector, result);
}

示例用法

假设有以下 HTML 结构:

<div class="grandparent">
  <div class="parent">
    <div class="child"></div>
  </div>
</div>

调用 parents 方法:

const child = document.querySelector('.child');
const ancestors = parents(child, 'div'); // 获取所有 div 父元素
console.log(ancestors); // [parent, grandparent]

注意事项

  • nodeType === 1 确保只处理元素节点(跳过文本节点、注释节点等)。
  • matches 方法用于检查元素是否匹配选择器,兼容性良好。
  • 如果需要兼容旧浏览器,可以使用 matches 的 polyfill 或 msMatchesSelector

以上方法提供了灵活的方式实现 parents() 功能,可根据需求选择递归或循环实现。

标签: jsparents
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js实现下拉菜单

js实现下拉菜单

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