【问题标题】:bind events on body or document?在正文或文档上绑定事件?
【发布时间】:2012-12-03 16:13:17
【问题描述】:

用户有时会在$('body') 上绑定事件,有时会在$(document) 上绑定事件

$(document).on('click', someAction);

$('body').on('click', someAction);

有什么理由比另一个更喜欢一个吗?

【问题讨论】:

  • 查看SpYk3HH给出的链接,$(document)选择器更快

标签: javascript jquery javascript-events


【解决方案1】:

对我来说,将事件绑定到 $(document) 而不是 $('body') 主要有一个原因:

无需等待domReady(文档先于一切可用 否则)

【讨论】:

    【解决方案2】:

    简短的回答很可能是,不,不是。

    某人这样做的原因应该始终是他需要在他的标记中全局捕获事件。由于<body> 标记应作为<html> 的直接兄弟标记,因此所有事件冒泡阶段都将在此结束。

    <html>
        <body>
             <div>
             </div>
    

    &lt;div&gt; 上的每个点击事件都会冒泡到 &lt;body&gt;&lt;html&gt;(如果没有手动停止)。所以对于那个用例,它应该没有任何区别。

    【讨论】:

      【解决方案3】:

      速度有一些差异,其他没有太大差异。不过,有人已经完成了这项工作,所以我只是将链接指向您。

      http://jsperf.com/jquery-body-vs-document-body-selector

      但是,与您的代码直接相关,有一个主要区别。 $(document).on('click', someAction); 将影响文档查看区域的任何位置,而 $('body').on('click', someAction); 可能不会影响尽可能多的区域,因为 body 可以具有独立的高度和宽度。

      【讨论】:

      • 我认为这与我的问题无关,因为区别在于 document.bodybody 而不是 documentbody
      • 文档是正文,但具有对象属性。它们基本上都是一样的,除了 document 为您提供了影响整个页面的操作属性,其中 body 被视为任何其他 html 元素
      • 所以根据你的解释,$('body') 应该比$(document) 快,但对我来说,你的reference 似乎相反。
      • 不,technically,body 是 Document 的一个元素,但是,我的意思是,几乎你对 body/$("body") 所做的任何事情,你都可以对 document/document.body 做/$(document).children("body") 并期望相同的结果,不同之处在于处理时间的毫秒数。
      猜你喜欢
      • 2013-04-08
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      • 2018-07-22
      • 2020-01-16
      相关资源
      最近更新 更多