当前位置:首页 > JavaScript

js 实现jquery find

2026-03-16 06:17:11JavaScript

使用原生 JavaScript 实现类似 jQuery 的 find 方法

jQuery 的 find 方法用于在当前元素的子元素中查找匹配选择器的元素。以下是几种原生 JavaScript 的实现方式:

使用 querySelectorAll 实现

function find(selector, context) {
  context = context || document;
  return context.querySelectorAll(selector);
}

这个实现简单直接,但需要注意它返回的是 NodeList 而非数组。

js 实现jquery find

递归实现查找子元素

function find(selector, parent) {
  parent = parent || document;
  let elements = [];

  const children = parent.children;
  for (let i = 0; i < children.length; i++) {
    const child = children[i];
    if (child.matches(selector)) {
      elements.push(child);
    }
    elements = elements.concat(find(selector, child));
  }

  return elements;
}

这个实现更接近 jQuery 的实际行为,递归查找所有子元素。

js 实现jquery find

使用 Element.prototype 扩展方法

Element.prototype.find = function(selector) {
  return this.querySelectorAll(selector);
};

// 使用示例
document.find('#container').find('.item');

这种方法为所有 DOM 元素添加了 find 方法,类似于 jQuery 的链式调用。

兼容性更好的实现

function find(selector, context) {
  context = context || document;
  try {
    return context.querySelectorAll(selector);
  } catch(e) {
    const elements = [];
    const children = context.getElementsByTagName('*');

    for (let i = 0; i < children.length; i++) {
      if (children[i].id === selector.replace('#', '') || 
          children[i].className.split(' ').indexOf(selector.replace('.', '')) !== -1) {
        elements.push(children[i]);
      }
    }

    return elements;
  }
}

这个实现提供了基本的回退方案,在不支持 querySelectorAll 的旧浏览器中也能工作。

注意事项

  • 原生 JavaScript 方法通常返回 NodeList 而非 jQuery 对象
  • 如果需要链式调用,可以封装返回对象
  • 性能上 querySelectorAll 通常是最优选择
  • 复杂选择器可能需要额外处理

这些实现提供了从简单到复杂的不同方案,可以根据具体需求选择合适的实现方式。

标签: jsjquery
分享给朋友:

相关文章

js防抖和节流实现

js防抖和节流实现

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

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

锋利的jquery

锋利的jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。其核心特点是“写得更少,做得更多”,适合快速开发动态网…

jquery中

jquery中

jQuery 基础概念 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。其核心特点是“写得更少,做得更多”(Write L…

jquery页面

jquery页面

jQuery 页面操作指南 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互的操作。以下是 jQuery 在页面中的常见使用方法…