当前位置:嗨网首页>书籍在线阅读

33-解决方案

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

8.8.2 解决方案

event.target 属性引用获取事件的元素,也就是具体的元素。

这意味着,如果在一个链接中有张图片而你单击了该链接, event.target 将是那张图片而不是链接。

那么,你怎么解决这个问题呢?如果你不打算使用事件委托,那么使用 this (函数作用域)或者 event.currentTarget (从jQuery 1.3起)应该可以解决。这两个属性总是指向绑定了事件处理程序的元素。如果你确实使用事件委托,那么需要找出预期的双亲元素。

从jQuery 1.3起,可以使用 closest()[12]正如文档中所指出的那样,它返回最靠近的元素,从当前位置一直上溯到双亲,后者匹配某个选择器。

如果你使用的是旧版本的jQuery,可以用如下代码模拟 closest()

jQuery.fn.closest = function( selector ){
   return this.map(function(){
     var $parents = jQuery(this).parents();
     return jQuery(this).add($parents).filter( selector )[0];
   });
}

对此可以做一些性能上的改进,但是这个简单的版本能够用于一般的用途。

下面是使用 closest() 最常见情况的一个例子:

jQuery('table').click(function(e){
   var $tr = jQuery(e.target).closest('tr');
   // 对表格行作某些操作
});