当前位置:首页 > JavaScript

js closest 实现

2026-02-01 14:51:21JavaScript

实现 closest 方法

closest 是 DOM 元素的一个方法,用于查找与当前元素匹配的选择器的最接近的祖先元素。如果原生不支持 closest,可以通过以下代码实现:

js closest 实现

function closest(element, selector) {
  if (Element.prototype.closest) {
    return element.closest(selector);
  }

  let el = element;
  while (el) {
    if (matchesSelector(el, selector)) {
      return el;
    }
    el = el.parentElement;
  }
  return null;
}

function matchesSelector(el, selector) {
  const matches = el.matches || el.webkitMatchesSelector || el.msMatchesSelector;
  return matches.call(el, selector);
}

使用方法

调用 closest 函数时传入目标元素和选择器:

js closest 实现

const element = document.querySelector('.child');
const closestParent = closest(element, '.parent');
console.log(closestParent);

兼容性处理

该实现首先检查浏览器是否原生支持 closest,如果不支持则手动向上遍历 DOM 树,直到找到匹配的元素或到达根元素。

注意事项

  • 确保传入的 element 是有效的 DOM 元素。
  • 选择器语法需符合标准 CSS 选择器规范。
  • 在不支持 matches 的旧浏览器中,需使用对应的前缀方法(如 webkitMatchesSelector)。

标签: jsclosest
分享给朋友:

相关文章

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…

js实现吸色

js实现吸色

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