jQuery live()与1.7+;

jQuery live()与1.7+;,jquery,live,Jquery,Live,我知道在jQuery1.7中,.live()方法已被弃用。这就是我想到的: $(document.body).on('click', '#list', function() { console.log($(this)); }); 这就相当于: $('#list').live('click', function(){ console.log($(this)); }); 它们都返回#listjQuery对象,这正是我想要的。 但是,问题是当我将jQuery对象作为第二个参数而不是

我知道在jQuery1.7中,.live()方法已被弃用。这就是我想到的:

$(document.body).on('click', '#list', function() {
    console.log($(this));
});
这就相当于:

$('#list').live('click', function(){
    console.log($(this));
});
它们都返回#listjQuery对象,这正是我想要的。 但是,问题是当我将jQuery对象作为第二个参数而不是字符串(这种情况经常发生)传递时,例如:

控制台返回$(body)jQuery对象。这在那一点上是没有用的 有什么想法吗


编辑:这里的问题不是如何访问示例1和2中受影响的对象$(“#列表”),而是如何访问示例3中的对象。

您可以在官方网站上找到一个非常清楚的答案:

此后,不再建议使用.live()方法 jQuery的版本提供了更好的方法,而这些方法没有它的特性 缺点。特别是,使用 .live():

  • jQuery在调用
    .live()
    方法之前尝试检索选择器指定的元素,该方法可能是 处理大型文档非常耗时
  • 不支持链接方法。例如,
    $(“a”).find(“.offsite,.external”).live(…)是
    无效,无法按预期工作
  • 由于所有
    .live()
    事件都附加在
    文档
    元素上,因此事件花费的时间最长、速度最慢 处理它们之前的可能路径
  • 召唤 在中,事件处理程序在停止事件处理程序时无效 附在文件下方;事件已传播到
    文档
  • .live()
    方法以令人惊讶的方式与其他事件方法交互,例如。,
    $(文档)。取消绑定(“单击”)
    删除所有单击处理程序 通过调用
    .live()
    附加

将对象作为第二个参数传递到
上的
是不正确的

从:

.on(事件[,选择器][,数据],处理程序(事件对象))

它需要一个选择器而不是jQuery对象,因此您需要使用:

$(document.body).on('click', '#list', function() {
    console.log($(this));
});

可能重复:我想不太可能。我描述了关于访问受事件影响的对象的问题,而不是这两种方法之间的区别。控制台返回的正是预期的$(这)在这种情况下引用document.body的内容。但是我如何访问受影响的对象(例如,假设有同级对象)?那么我如何访问受影响的选择器(例如,如果有同级对象)?如中所示,如果选择器将匹配其他列表元素<代码>$(此)
将引用已单击的一个。我在第一篇文章中添加了一个编辑,希望这会突出问题。(“这里的问题不是如何访问示例1和2中受影响的对象$('#list'),而是如何访问示例3中的对象。”)我明白了。答案是一样的;你不能。第二个参数是选择器而不是对象。嗯,我明白了。它不否认干燥的概念吗?
$(document.body).on('click', '#list', function() {
    console.log($(this));
});