获取 .delegate 的选择器

发布于 2024-10-16 22:10:30 字数 365 浏览 1 评论 0原文

在此代码中,我需要获取 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 是什么并访问该对象?

In this code I need to get the DOM object that is .tabs the original selector that the delegate is wired up against.

$(".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;
});

How to determine what .tabs is and access the object?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

最美不过初阳 2024-10-23 22:10:30

在有人找到更聪明的方法之前,解决方法可能是将事件处理程序附加到所选元素本身:

$('.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
    }
});

更新:

原始< code>Event 对象可通过 event.originalEvent 获得。所以你可以这样做:

$(".tabs").delegate("li:not(.selected) a", "click", function (event) {
    var dom = event.originalEvent.currentTarget;
});

但是似乎 currentTarget 仅在 IE9 中受支持,并且在较低的 IE 版本中没有替代方案

所以跨浏览器兼容程度最高的解决方案仍然是上面的那些。

Until someone finds a smarter way, a workaround could be to attach an event handler to the selected elements themselves:

$('.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 guarantees that event handlers are executed in the order they are attached.

Or you don't use delegate at all and make the selector test yourself (this is probably the best solution):

$('.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
    }
});

Update:

The original Event object is available via event.originalEvent. So you could do:

$(".tabs").delegate("li:not(.selected) a", "click", function (event) {
    var dom = event.originalEvent.currentTarget;
});

But it seems currentTarget is only supported in IE9 and there is no alternative in lower IE versions.

So the most cross-browser compatible solutions are still the ones above.

酷炫老祖宗 2024-10-23 22:10:30

使用 .on() 方法,您可以通过将事件对象传递给函数并访问其 delegateTarget 属性来访问委托目标。

示例:

$('.foo').on('click', 'a', function(ev) {
  // this is the .foo element for this anchor
  console.log(ev.delegateTarget);
});

工作示例: http://jsfiddle.net/corydorning/ZzADh/

With the .on() method, you can access the delegated target by passing the event object to your function and accessing its delegateTarget property.

Example:

$('.foo').on('click', 'a', function(ev) {
  // this is the .foo element for this anchor
  console.log(ev.delegateTarget);
});

Working Example: http://jsfiddle.net/corydorning/ZzADh/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文