在这段代码中,我需要获取 DOM对象,即.tabs
代理所连接的原始选择器。
$(".tabs").delegate("li:not(.selected) a", "click", function () {
// ^
// |
// +-----------i need to get this dom object
var selector = $(this).selector; // <---- returns an empty string ?
return false;
});
如何确定.tabs
是什么并访问该对象?
答案 0 :(得分:5)
在有人找到更聪明的方法之前,解决方法可能是将事件处理程序附加到所选元素本身:
$('.tabs').click(function(event) {
event.root = this; // or whatever name suits you best
});
$(".tabs").delegate("li:not(.selected) a", "click", function (event) {
// event.root contains the DOM element
});
jQuery保证事件处理程序按照它们附加的顺序执行。
或者您根本不使用delegate
并自行进行选择器测试(这可能是最佳解决方案):
$('.tabs').click(function(event) {
if($(event.target).is("li:not(.selected) a")) {
// this refers to the .tab DOM element
// event.target refers to the originally clicked element
}
});
<强>更新强>
原始Event
对象可通过event.originalEvent
获得。所以你可以这样做:
$(".tabs").delegate("li:not(.selected) a", "click", function (event) {
var dom = event.originalEvent.currentTarget;
});
但看起来currentTarget
仅在IE9中受支持,在较低的IE版本中没有其他选择。
因此,大多数跨浏览器兼容的解决方案仍然是上述解决方案。
答案 1 :(得分:2)
使用.on()
方法,您可以通过将事件对象传递给函数并访问其delegateTarget
属性来访问委派的目标。
示例:
$('.foo').on('click', 'a', function(ev) {
// this is the .foo element for this anchor
console.log(ev.delegateTarget);
});