jquery筛选this下的第一个子元素

admin 103 0
在jQuery中,筛选当前元素(this)下的第一个直接子元素,可通过$(this).children(':first')$(this).children().first()实现,前者结合选择器直接匹配首个直接子元素,后者先获取所有直接子元素再取首个,注意.children()仅遍历直接子元素,不包含后代元素,两种方法均能高效定位目标,适用于动态筛选或事件处理场景,是DOM操作中常用的子元素选择技巧。

jQuery技巧:精准获取 `this` 下的首个子元素

在 jQuery 开发中,我们经常需要针对当前触发事件的元素(即 `this`)的子元素执行操作,点击某个列表项时高亮其内部的第一个子元素,或在提交表单前获取容器内的首个输入框进行验证,本文将深入探讨如何使用 jQuery 精准筛选 `this` 下的第一个子元素,涵盖常用方法、语法差异、性能考量及实际应用场景,助您高效开发。

理解 `this` 与 `$(this)` 的核心差异

在事件处理函数中,`this` 是一个原生 JavaScript 对象,指向触发当前事件的 DOM 元素(如被点击的按钮、鼠标悬停的链接等),`this` 本身无法直接调用 jQuery 提供的丰富 API,我们需要通过 `$(this)` 将其包装成一个 jQuery 对象,从而能够使用 jQuery 的所有方法和属性。

$("button").click(function() {
    // this 是原生 DOM 元素
    console.log(this); // 输出:  (原生对象)
// $(this) 是 jQuery 对象
console.log($(this)); // 输出: jQuery.fn.init [button, prevObject: jQuery.fn.init(1)]

筛选 `this` 下首个子元素的常用方法详解

获取 `this` 下的第一个子元素,关键在于明确“子元素”的范围:是仅限**直接子元素**(一级),还是包含所有**后代子元素**(多级)?jQuery 提供了多种方法,需根据具体需求选择最合适的方案。

`children().first()`:获取首个直接子元素

`children()` 方法用于获取当前元素的所有**直接子元素**(不包含后代元素,如孙元素、曾孙元素等),返回一个 jQuery 对象,随后调用 `.first()` 方法可从中筛选出第一个元素。

语法:

$(this).children().first()

示例:
假设 HTML 结构如下:

直接子元素1

直接子元素2

后代子元素(非直接子元素)

点击 `#parent` 时,获取其第一个直接子元素(`.child1`):

$("#parent").click(function() {
    // 获取第一个直接子元素(.child1)
    const firstDirectChild = $(this).children().first();
    firstDirectChild.css("color", "red");
});

`children(':first')`:直接筛选首个直接子元素(简洁语法)

`children()` 方法支持传入选择器,`first` 是 jQuery 的伪选择器,用于匹配集合中的第一个元素,`$(this).children(':first')` 可直接获取第一个直接子元素,效果与 `$(this).children().first()` 完全相同,但语法更简洁,链式调用更流畅。

语法:

$(this).children(':first')

示例(同上):

$("#parent").click(function() {
    // 直接获取第一个直接子元素(.child1)
    const firstDirectChild = $(this).children(':first');
    firstDirectChild.css("color", "red");
});

`find(':first')`:获取首个后代子元素(多级遍历)

如果需要获取 `this` 下的**第一个后代子元素**(包含所有层级的子元素,如直接子元素、孙元素、曾孙元素等),应使用 `find()` 方法,`find(':first')` 会深度遍历 `this` 的所有后代元素,返回第一个匹配的元素。

语法:

$(this).find(':first')

示例(同上 HTML 结构):

$("#parent").click(function() {
    // 获取第一个后代子元素(.child1,因为它在DOM树中最早出现)
    const firstDescendant = $(this).find(':first');
    firstDescendant.css("color", "blue");
});

重要提示: `find(':first')` 匹配的是 `this` 所有后代元素中**在DOM树中最早出现**的那个元素,而不仅仅是直接子元素,`#parent` 的第一个直接子元素后面紧跟着一个孙元素,且该孙元素在DOM树中比其他元素更早出现,则 `find(':first')` 会返回这个孙元素,而非第一个直接子元素。

`:first-child` 伪类:匹配满足“第一个”条件的子元素

`:first-child` 伪类用于匹配其父元素的**第一个子元素**,且该子元素必须是父元素的第一个孩子(即在其父元素中,没有其他兄弟元素位于它之前),与 `first` 不同,`:first-child` 是基于父元素的子元素集合进行筛选,而非全局匹配。

语法:

$(this).find(':first-child') // 查找 this 下满足“第一个子元素”条件的元素

示例:
HTML 结构:

  • 列表项1(第一个子元素)
  • 列表项2
  • 嵌套列表项(非 #list 的直接子元素)

点击 `#list` 时,获取其第一个子元素(第一个 `

  • `):