jquery获取父ID而不是子

时间:2013-10-24 16:22:41

标签: jquery

我有这个HTML代码:

<div id="main-link-1" class="menu-option">
  <div id="icon" class="menu-icon"></div>
  <div class="menu-text"> Overview </div>
  <div class="separator"></div>
</div>

我只想将jquery click事件添加到父.menu-option并获取id“#main-link-1”:

$('.menu-option').click($.proxy(this.navigatorLink,this));

navigatorLink功能:

navigatorLink : function(event){
    if(event.preventDefault) 
        event.preventDefault();
    else 
        event.returnValue = false;


    var link = event.target;

    var linkId = $(link).attr('id');
}

linkId应始终为父ID:“main-link-1”

但是当我点击孩子们时,我会把孩子们当作身份。当我点击悬停孩子时,如何才能获得parent_id事件?

我知道它应该很容易,但是我没有找到方法而不改变html, 提前致谢!

1 个答案:

答案 0 :(得分:1)

感谢您在问题中发布实际代码。这使得回答起来容易得多。

当前的问题是,通过使用代理,您将失去对默认this参数的跟踪,这就是您需要用来查看正在接听电话的元素。在使用event.target时,您将获得单击的确切元素,而不是捕获事件传播的元素。 (有关thisevent.target之间区别的一个很好的直观示例,请参阅http://javascript.info/tutorial/bubbling-and-capturing#this-and-event-target。)

我想问题是:你为什么要使用proxy?这似乎是不必要的,因为你没有在函数中使用this。除非您的代码多于此代码,否则我会执行以下操作:

$('.menu-option').click(this.navigatorLink);


navigatorLink : function(event){
    if(event.preventDefault) 
        event.preventDefault();
    else 
        event.returnValue = false;

    var linkId = $(this).attr('id');
}

如果您的代码使用this,那么您无法以这种方式进行更改,您可以保留旧代码并使用closest

navigatorLink : function(event){
    if(event.preventDefault) 
        event.preventDefault();
    else 
        event.returnValue = false;

    var link = event.target;

    var linkId = $(link).closest(".menu-option").attr('id');
}