当前位置:首页 > JavaScript

js closest 实现

2026-03-14 13:46:48JavaScript

实现 closest 方法

closest 方法用于查找与当前元素匹配指定选择器的最近祖先元素。如果不存在匹配的祖先元素,则返回 null。以下是手动实现 closest 的方法:

js closest 实现

function closest(element, selector) {
  while (element) {
    if (element.matches(selector)) {
      return element;
    }
    element = element.parentElement;
  }
  return null;
}

使用示例

假设有以下 HTML 结构:

js closest 实现

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

查找 .child 元素的最近 .ancestor 祖先:

const child = document.querySelector('.child');
const ancestor = closest(child, '.ancestor');
console.log(ancestor); // 输出: <div class="ancestor">...</div>

兼容性处理

如果需要支持旧版浏览器,可以添加 matches 方法的兼容性处理:

if (!Element.prototype.matches) {
  Element.prototype.matches = 
    Element.prototype.matchesSelector || 
    Element.prototype.webkitMatchesSelector ||
    Element.prototype.msMatchesSelector;
}

注意事项

  • matches 方法用于检查元素是否匹配指定的选择器。
  • parentElement 属性用于获取元素的父元素。
  • 循环会一直向上查找,直到找到匹配的元素或到达文档根元素。

标签: jsclosest
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…