JQuery:获取被点击元素的父元素id

Posted

技术标签:

【中文标题】JQuery:获取被点击元素的父元素id【英文标题】:JQuery: Get the parent element id of a clicked element 【发布时间】:2012-04-12 21:39:31 【问题描述】:

我有一个这样的 div:

<div id="popupDiv1" class="popupDivClass">
    <a id="popupDivClose" class="popupCloseClass">x</a>
</div>

当我点击“x”时(我想运行一个名为 disablePopup(id); 的 jquery 函数,其中 id 是对应的 popupDiv 的 id(我有很多 popupDiv,每个都有自己的 X 按钮。

为了做到这一点,我实现了以下

$(".popupCloseClass").click(function (event) 
    var buttonID = $(event.target).attr("id");
    var id = $( buttonID).closest("div").attr("id");
disablePopup(id);
);

基本上我得到了 popupCloseClass 点击的 id,然后我通过最接近的方法得到了它的父级(相应的 popupDiv)的 id。然后我调用 disablePopup。

但这不起作用。

我什至尝试使用var buttonID = $(buttonID).parent().attr("id"); 方法,但也没有用。

我也试过var id = this.id;

非常感谢任何帮助

谢谢

【问题讨论】:

buttonID 将包含字符串 "popupDivClose"。如果你将它传递给 jQuery,它将搜索所有带有 tag name popupDivClose 的元素。 ID 选择器以# 开头。但由于event.target(甚至this)已经指向你想要的元素,只需使用$(event.target).closest(...)...$(this).closest(...)...。我建议阅读更多 jQuery 教程... 【参考方案1】:

您可以像这样使用parent,而不是使用closest...

var id = $(this).parent().attr("id");

请注意,您可以使用 this 关键字来引用启动事件的元素。正如您所拥有的那样,您使用 buttonID 的值作为元素选择器,其值为 "popupDivClose" 并且在开始时不添加 # 它不会搜索 ID,而是搜索标签元素称为“popupDivClose”。

如果你想继续使用 buttonID,你可以使用这行代码来让它工作......

var id = $("#" + buttonID).parent().attr("id");

但是,我更愿意像这样写整个事件......

$(".popupCloseClass").click(function (event) 
    event.preventDefault();

    var id = $(this).parent().attr("id");

    disablePopup(id);
);

注意event.preventDefault(); 的使用,这将确保浏览器不会处理链接点击的自然动作(即页面导航) - 不过,至少在 Chrome 中,无论如何您都需要为导航指定 href 值

Here is a working example

【讨论】:

【参考方案2】:

这必须有效:

$(".popupCloseClass").click(function (event) 

    var buttonID = $(this).parent().attr('id');
    disablePopup(buttonID);
);

【讨论】:

【参考方案3】:

你应该这样做

$(".popupCloseClass").click(function (event) 
    var id = $(this).closest("div").attr("id");
);

(您也可以使用 $(this).parent().attr("id"); )但是如果您更改 html 结构,使用最接近的会更安全

【讨论】:

请注意,parent() 只会返回直接父级,因此选择器参数毫无意义。但是,您可以使用parents(selector),它将采用选择器并返回与选择器匹配的所有父级(一直向上) @musefan 是的,这毫无意义,根据我的经验,最好使用最接近(),因为您通常最终会修改 html 并破坏使用 parent() 的代码 一个很好的观点,绝对值得考虑。但是,我还没有以这种方式破坏我的代码......再说一次,我不会经常使用这种功能【参考方案4】:

这很好用:

$('a.popupCloseClass').click(function() 
    var id = $(this).parent().attr('id');
);​

JSFiddle Demo

您应该只使用 this 而不是获取 ID 然后尝试将其用作选择器的方式(您在 ID 之前缺少 #):

【讨论】:

以上是关于JQuery:获取被点击元素的父元素id的主要内容,如果未能解决你的问题,请参考以下文章

jquery怎么获取当前元素的父元素

jquery怎么获取当前元素的父元素

jquery怎么获取父元素上一个元素的id

c#关于树节点怎么获取父节点下的所有子节点的ID

jquery如何获得父级的父级元素?

SQL通过父节点获取所有子节点