jQuery,找到触发事件元素的选择器

时间:2012-10-12 11:56:30

标签: javascript jquery node.js jquery-selectors

我正在开发一个相当轻量级的实时应用程序。

我们正在使用jQuery的事件系统在我们的应用程序中的模块之间进行通信。因此,在DOM中进行更改的所有内容都应该影响模块之外的任何事情。事件必须这样做。

这些事件由clientide socket.io实现捕获,它要求nodejs socket.io服务器将事件广播给所有其他客户端。

我的问题: 有没有办法找出触发事件的选择器?如果我打电话给

$("tag.class").trigger("myevent");

我可以以某种方式做到

$(document).on("myevent", function() {
    console.log(this.selector)
});

它将打印“tag.class”

这很有趣,因为知道用户在选择上触发了某个事件会很有趣,而不是某些元素上的某个事件可能会在之后显得非常随机。

我已阅读this question但我希望能够在应用程序中触发的所有事件上获取选择器。

感谢您的时间:)

2 个答案:

答案 0 :(得分:2)

从链接的答案中获取灵感,您可以覆盖jQuery trigger函数。类似的东西:

$.fn.origTrigger = $.fn.trigger;
$.fn.trigger = function (fn) {
  var selector = this.selector;
  this.origTrigger(function (ev) {
    fn(ev, selector);
  });
};

答案 1 :(得分:0)

您最好的选择是通过活动发送数据。它也更强大,因为你有更多的控制权。选择器可能不漂亮,但数据是。

$('tag.class').trigger('myevent', ['some', 'param']);

$(document).on('myevent', function(param1, param2) {
    console.log(param1); // "some"
    console.log(param2); // "param"
});

当然,如果你想发送任意数量的参数,你可以使用“options”对象并以这种方式处理它:

$('tag.class').trigger('myevent', [{some: 'option', other: 'option'}]);

$(document).on('myevent', function(options) {
    var opts = {
        default: 'option',
        some: 'default',
        other: 'default'
    };
    $.extend(opts, options);

    console.log(opts); // {default: "option", some: "option", other: "option"}
});