【问题标题】:jQuery: live() vs delegate()jQuery:live()与委托()
【发布时间】:2010-11-17 12:26:27
【问题描述】:

我在我的 Web 应用程序中使用 jQuery。在阅读它的文档时,我读到了 live()delegate()。尽管他们已经解释了这两种方法,但我不明白它们之间的确切区别。也不确定哪种方法在哪种情况下是理想的。

请帮助我清楚地了解这些方法。

谢谢

【问题讨论】:

  • 简明扼要:JQuery -- live vs delegate.
  • 除了下面的答案,读者可能还想看看这个难以置信的好article解释bindlive和@987654327之间的区别@.

标签: javascript live jquery


【解决方案1】:

.live() 要求您立即运行选择器,除非您使用结果非常浪费。这里的事件处理程序附加到document,因此必须检查来自任何冒泡元素的所有该类型的事件。这是一个使用示例:

$(".myClass").live("click", function() { alert("Hi"); });

请注意,$(".myClass") 语句运行该选择器以查找具有该类的所有元素即使我们不关心它们,我们想要的只是字符串".myClass"click 事件冒泡到document 时匹配稍后


.delegate() 实际上在内部使用.live(),但带有上下文。选择器不会立即运行,所以它已经更高效了,并且它不附加到document(虽然它可以)它更加本地化......以及所有那些其他 来自您不关心的其他元素树的事件在冒泡时甚至不会被检查......再次更有效。这是一个使用示例:

$("#myTable").delegate("td", "click", function() { alert("Hi"); });

现在这里发生了什么?我们运行 $("#myTable") 来获取要附加到的元素(诚然比 document 更昂贵,但我们正在使用结果。然后我们将事件处理程序附加到该元素(或其他情况下的事件处理程序) ) 元素。只有来自 within 元素的 clicks 在发生时针对 "td" 选择器进行检查,而不是像 .live() 那样来自 everywhere (因为 一切都在document)内。

【讨论】:

【解决方案2】:

delegate() 映射到 jQuery 代码中的 live()。主要区别在于 live() 在您希望将事件委托给不同元素的元素上调用。 live() 会将这些事件委托给 document 对象。

另一方面,

delegate() 允许您通过传递选择器来设置委托给哪些元素事件。如果原始元素与选择器匹配,则处理冒泡到该元素的事件。

与@NickCraver mentioned 一样,delegate() 比实时执行更好,因为它不一定从页面上的每个元素中捕获事件,也不会立即查询选择器。

【讨论】:

    【解决方案3】:

    来自 jQuery 文档:

    从 jQuery 1.7 开始,不推荐使用 .live() 方法。使用 .on() 附加事件处理程序。旧版本 jQuery 的用户应该使用 .delegate() 而不是 .live()。

    http://api.jquery.com/live/

    【讨论】:

      【解决方案4】:

      直播方式:

      $("#mymethod").live("click", function() { alert("It checks the entire DOM"); });
      

      实时方法检查整个 DOM 中的#mymethod(有时根据您的 DOM 内容需要时间)

      委托方法:

      $('.mycontainer').delegate('#mymethod','click',function() { alert('Checks only in mycontainer portion') });
      

      Delagate 不会搜索你的整个 DOM,它只搜索你的 mycontainer 部分。(提高性能)

      【讨论】:

        猜你喜欢
        • 2011-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-09
        • 2015-10-30
        • 1970-01-01
        • 2011-05-27
        相关资源
        最近更新 更多