当前位置:首页 > JavaScript

js实现closest

2026-04-06 23:58:02JavaScript

实现 closest 方法

closest 方法用于查找与当前元素匹配的选择器的最近祖先元素。以下是一个纯 JavaScript 的实现方式:

function closest(element, selector) {
  if (!element || !selector) return null;

  while (element) {
    if (element.matches(selector)) {
      return element;
    }
    element = element.parentElement;
  }

  return null;
}

使用示例

const childElement = document.querySelector('.child');
const parentElement = closest(childElement, '.parent');
console.log(parentElement);

兼容性处理

如果需要支持旧版浏览器,可以添加 matches 方法的 polyfill:

js实现closest

if (!Element.prototype.matches) {
  Element.prototype.matches = 
    Element.prototype.matchesSelector || 
    Element.prototype.mozMatchesSelector ||
    Element.prototype.msMatchesSelector || 
    Element.prototype.oMatchesSelector || 
    Element.prototype.webkitMatchesSelector ||
    function(s) {
      const matches = (this.document || this.ownerDocument).querySelectorAll(s);
      let i = matches.length;
      while (--i >= 0 && matches.item(i) !== this) {}
      return i > -1;
    };
}

注意事项

  • 该方法会从当前元素开始向上查找,直到找到匹配的元素或到达文档根节点。
  • 如果未找到匹配元素,返回 null
  • 确保传入有效的 DOM 元素和选择器字符串。

标签: jsclosest
分享给朋友:

相关文章

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js防抖和节流实现

js防抖和节流实现

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

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…

js 实现图片轮播

js 实现图片轮播

基础实现方案 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS负责样式布局,JavaScript处理轮播逻辑。 <div class="…