使用jquery代替实时 - 我如何获得过滤后的元素

时间:2012-04-27 13:56:39

标签: jquery

使用jQuery,我用.on()替换旧的.live()事件绑定,如下所示:

$(document).on(event, selector, function () {
    console.log($(this)); //$(this) refers to the $(document) element, not the selector

});

我想要做的是访问要应用此事件的元素。有什么想法吗?

这有效:

$(selector).on(event, function () {
    console.log($(this)); //$(this) refers to the selector
});

但它的工作方式与live不同 - 添加到匹配选择器的文档中的新元素不会被绑定...

谢谢!

3 个答案:

答案 0 :(得分:0)

根据文档,您的假设不正确:

$("body").on("click", "p", function(){
  alert( $(this).text() );
});

其中,我们被告知“只要点击它就会在警告框中显示每个段落的文字。”因此,this引用是由过滤选择器匹配的元素。

您可以通过设置示例来提醒nodeName对象的this来自行测试:

$("body").on("click", "p", function(){
  alert( this.nodeName ); // p
});

演示:http://jsbin.com/eseduf/edit#javascript,html

我注意到您使用变量作为过滤选择器 - 确保您为此变量设置了值。如果不这样做,您会发现主选择器将捕获事件,而不是过滤选择器:

var selector;
$("body").on("click", selector, function(){
  alert( this.nodeName ); // body
});

答案 1 :(得分:0)

您可以添加事件将应用于的“选择器”。做像活的事,做到这一点:

$(document).on("click", "a", function() { console.log($(this)); });

最好是模拟.delegate,并将范围缩小到包含元素:

$("#containingElement").on("click", "a", function() { console.log($(this)); });

答案 2 :(得分:0)

查看此jsFiddle ... http://jsfiddle.net/nc9XD/1/

“on”方法将获取新元素...只要它们被添加到您将on事件绑定到的元素。

此外..“this”将引用您在函数中单击的元素。