← jQuery :nth-child()选择器:按位置精准匹配子元素 jQuery post()方法:通过HTTP POST请求发送数据到服务器 →

jQuery parent()方法:精准获取直接父元素

原创 2026-05-01 jQuery 已有人查阅

在 DOM 树中向上查找元素时,parent() 是 jQuery 提供的最直接的方法。它只向上遍历一层,返回选中元素的直接父级。如果你只关心“包裹这个元素的容器是谁”,parent() 就是合适的工具。

jQuery 的向上遍历方法不止一个。parents() 会一路回溯到根节点,返回所有祖先元素的;parentsUntil() 则在遇到指定边界时停下。parent() 的职责在这三者里最单纯——只查一层,只返回一个直接父元素。

为什么在明知只需要直接父元素时我坚持用 parent() 而不是 parents()?

parents() 返回的是一个,可能包含多个元素。如果你用 $("span").parents() 然后调用 .css(),样式会应用到所有祖先上,从直接父元素一直到 <html> 都可能被波及。这种意外扩散在调试时很耗时,因为波及范围比你预期的要大很多。parent() 天然限定了影响范围,代码的可预测性更高。

语法

$(selector).parent(filter)
  • selector:要查找父元素的目标元素。

  • filter(可选):一个选择器表达式,用于在直接父元素中进一步筛选。只有当直接父元素匹配这个选择器时,才会被返回。如果父元素不匹配,结果集为空。

课程知识要点

  • 严格单层向上parent() 只返回紧邻的上一级元素,不会继续向上回溯。

  • 可选 filter 参数:传入选择器可以限定“只返回匹配特定条件的直接父元素”,这在复杂 DOM 结构里非常实用。

  • 与 parents() 的区别parents() 返回所有祖先,parent() 只返回直接父级。选错方法可能导致样式扩散或逻辑误判。

  • 与 closest() 的区别closest() 从当前元素自身开始向上匹配,直到找到第一个符合条件者;parent() 只检查直接父级。两者的搜索起点和深度都不同。

示例一:获取直接父元素(不带过滤条件)

这个例子展示了 parent() 最基本的用法。页面中有一个多层嵌套结构,点击按钮后找出 h2 元素的直接父级并高亮。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>parent() 基础用法 · 编程学习</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <style>
        .main * {
            display: block;
            font-size: 18px;
            border: 2px solid #333;
            color: #333;
            padding: 10px;
            margin: 15px;
        }
    </style>
    <script>
        function findDirectParent() {
            $(document).ready(function () {
                // 找到 h2 的直接父元素,应用新样式
                $("h2").parent().css({
                    "font-size": "24px",
                    "color": "#1a73e8",
                    "border": "6px dashed #1a73e8"
                });
            });
        }
    </script>
</head>
<body class="main">
    body
    <div>
        div 容器
        <ul>
            ul 列表
            <h2>
                h2 标题
                <p>段落元素</p>
            </h2>
        </ul>
    </div>
    <button onclick="findDirectParent()">查找 h2 的直接父元素</button>
</body>
</html>

点击按钮后,只有 ul 元素被高亮——因为它是 h2 的直接父级。div 容器和 body 都不受影响。如果用 parents() 替代,以上所有祖先都会被染色。

示例二:使用 filter 参数筛选特定父元素

当页面上有多个相同标签的元素,但它们的直接父元素类型不同时,filter 参数可以用来精准锁定目标。下面的例子中,三个 p 元素分别放在 divh2 和 ul 里,我们只想找到 h2 作为直接父级的那个 p

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>parent() 使用 filter 过滤 · 编程学习</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <style>
        .main * {
            display: block;
            font-size: 18px;
            border: 2px solid #333;
            color: #333;
            padding: 8px;
            margin: 10px;
        }
    </style>
    <script>
        function findSpecificParent() {
            $(document).ready(function () {
                // 只在直接父级为 h2 的 p 元素上生效
                $("p").parent("h2").css({
                    "color": "#d93025",
                    "border": "5px dashed #d93025"
                });
            });
        }
    </script>
</head>
<body class="main">
    body
    <div>
        div 容器
        <div>
            内层 div
            <p>段落一(父元素是 div)</p>
        </div>
        <h2>
            h2 标题
            <p>段落二(父元素是 h2)</p>
        </h2>
        <ul>
            ul 列表
            <p>段落三(父元素是 ul)</p>
        </ul>
    </div>
    <button onclick="findSpecificParent()">查找父元素为 h2 的段落</button>
</body>
</html>

点击按钮后,只有“段落二”及其父元素 h2 被应用了新样式。另外两个 p 元素因父级不匹配 h2 而被忽略。这种用法在需要从一组同类元素中筛出特定父级关联项时很高效。

示例三:结合 :first 伪类选择器

当多个元素被选中,但你只想对其第一个元素的直接父级做操作时,可以结合 :first 伪类选择器作为 filter 参数。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>parent() 结合 :first · 编程学习</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <style>
        .main * {
            display: block;
            font-size: 18px;
            border: 2px solid #333;
            color: #333;
            padding: 6px;
            margin: 10px;
        }
    </style>
    <script>
        function findFirstParent() {
            $(document).ready(function () {
                // 在所有 p 的父元素中,只保留第一个
                $("p").parent(":first").css({
                    "color": "#1a73e8",
                    "border": "3px dashed #1a73e8"
                });
            });
        }
    </script>
</head>
<body class="main">
    body
    <div>
        外部 div
        <div>
            内部 div
            <h2>
                h2 标题
                <p>段落一</p>
            </h2>
            <h2>
                另一个 h2
                <p>段落二</p>
            </h2>
        </div>
    </div>
    <button onclick="findFirstParent()">查找第一个 p 的父元素</button>
</body>
</html>

两个 p 元素的直接父级分别是两个不同的 h2。使用 parent(":first") 后,只有第一个 h2 及其子元素被高亮。这是在中按顺序做取舍的一种便捷方式。

个人经验与实用建议

在开发中,parent() 在事件处理函数里出现频率很高。当你点击某个按钮或链接时,this 指向触发元素本身,但你想操作的是它所在的容器。此时 $(this).parent() 是最直接的定位方式:

$(".btn-delete").click(function () {
    $(this).parent().fadeOut();
});

如果结构层级不确定——有时候按钮直接放在容器里,有时候被包在一个 span 里——用 parent() 就可能拿错元素。这时 closest() 会更合适,它会从当前元素自身开始向上搜索,无论中间隔了几层都能找到第一个匹配的祖先。parent() 和 closest() 虽然都是向上遍历,但前者严格只查一层,后者柔性递归,两者的适用场景有明显边界。

filter 参数虽然方便,但要注意它的筛选逻辑:它会检查直接父元素是否匹配选择器,如果不匹配,返回的 jQuery 对象为空。如果你在空对象上调用 .css() 或其他方法不会有任何效果也不会报错,这个静默特性在排查“为什么样式没生效”时值得留意。

← jQuery :nth-child()选择器:按位置精准匹配子元素 jQuery post()方法:通过HTTP POST请求发送数据到服务器 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号