2012-03-29 173 views
8

我有这样一个div:JQuery的:获取点击的元素的父元素ID

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

当我点击“X”(我要运行名为disablePopup(id);一个jQuery函数,其中id是在coresponding popupDiv的ID(我有许多各自与popupDiv它自己的X按钮。

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

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

basicaly我得到popupCloseCl的id屁股点击,然后我通过最接近的方法得到它的父母(相应的popupDiv)的ID。然后我调用disablePopup。

但是,这是行不通的。

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

我也试过var id = this.id;

任何帮助是极大的赞赏

感谢

+0

'buttonID'将包含字符串' “popupDivClose”'。如果你将它传递给jQuery,它将搜索所有具有**标签名称** popupDivClose的元素。 ID选择器以'#'开头。但是由于'event.target'(甚至是'this')已经指向了你想要的元素,只需使用'$(event.target).closest(...)...'或'$(this).closest (...)...'。我建议阅读更多的jQuery教程... – 2012-03-29 08:56:20

回答

13

而不是使用closest可以使用parent这样的...

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

+0

非常感谢你的明确解释 – Youssef 2012-03-29 09:18:40

0

你应该做

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

(你也可以使用$(this).parent().attr("id");),但使用最接近的情况下是安全的你改变你的html结构

+0

请注意,“parent()”将仅返回直接父级,因此选择器参数没有意义。你可以使用'父母(选择器)'这将采取一个选择器,并返回所有父母(一直在树上)匹配选择器 – musefan 2012-03-29 09:00:49

+0

@musefan是它毫无意义,根据我的经验,最好使用最接近(),因为你通常最终会修改你的html并打破​​使用parent()的代码 – 2012-03-29 09:02:48

+0

这是一个很好的观点,绝对值得考虑。然而,我还没有这样破坏我的代码......然后我再也没有经常使用这种功能 – musefan 2012-03-29 09:10:11

0

这工作得很好:

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

JSFiddle Demo

你应该只使用this而不是您获取ID的方式,然后尝试将其用作选择器(您错过了# bef矿ID):

0

这必须工作:

$(".popupCloseClass").click(function (event) 
{ 
    var buttonID = $(this).parent().attr('id'); 
    disablePopup(buttonID); 
});