Javascript 一页上有很多div

Javascript 一页上有很多div,javascript,jquery,html,Javascript,Jquery,Html,有没有办法“取消查找”屏幕上看不到的元素? 我有一个有很多div的页面,其中一些有附加的事件侦听器。45k以上的divs事件处理程序运行速度非常慢,所以我想,不渲染不必要的元素可能会有所帮助 仅供参考-当元素有显示:无时,一切正常。您应该在父div上添加一个事件侦听器,而不是添加45k个事件侦听器 使用jQuery,您可以执行以下操作: <div id="container"> <div class="clickable">a</div> <di

有没有办法“取消查找”屏幕上看不到的元素?
我有一个有很多div的页面,其中一些有附加的事件侦听器。45k以上的divs事件处理程序运行速度非常慢,所以我想,不渲染不必要的元素可能会有所帮助


仅供参考-当元素有
显示:无
时,一切正常。

您应该在父div上添加一个事件侦听器,而不是添加45k个事件侦听器

使用jQuery,您可以执行以下操作:

<div id="container">
  <div class="clickable">a</div>
  <div class="clickable">a</div>
  <div class="clickable">a</div>
  <div class="clickable">a</div>
  <div class="clickable">a</div>
  <div class="clickable">a</div>
  <div class="clickable">a</div>
  <div class="clickable">a</div>
</div>
这将改进您的javascript代码


如果仍然需要隐藏不可见的元素,则需要计算它们的位置,这可能会降低性能,而不是添加45k个事件侦听器,则应在父div上添加一个事件侦听器

使用jQuery,您可以执行以下操作:

<div id="container">
  <div class="clickable">a</div>
  <div class="clickable">a</div>
  <div class="clickable">a</div>
  <div class="clickable">a</div>
  <div class="clickable">a</div>
  <div class="clickable">a</div>
  <div class="clickable">a</div>
  <div class="clickable">a</div>
</div>
这将改进您的javascript代码


如果您仍然需要隐藏不可见的元素,则需要计算它们的位置,这可能会降低您的性能。当您需要将页面的各个部分相互分割(这就是div的用途)时,请使用div。例如,来自内容的页眉/页脚,或博客上的单个帖子


然而,在语义上,当另一个元素有意义时,不应该使用它们。虽然这不是一个重复,我认为这里找到的信息将对你有用

当您需要将页面的各个部分相互分割(这就是div的用途)时,请使用div。例如,来自内容的页眉/页脚,或博客上的单个帖子


然而,在语义上,当另一个元素有意义时,不应该使用它们。虽然这不是一个重复,我认为这里找到的信息将对你有用

出于兴趣,什么用例要求一个HTML页面上有45k个div?你是指删除DOM还是仅仅隐藏它们?因为如果要删除它们,绕过45k div的代码也会降低页面速度。一种方法是实现某种分页,这样页面上就不会有45k div。这太疯狂了。这花了多少个月/年的时间?没有“不付出”这回事。只是不要输出那么多div。使用服务器端逻辑不写出您不需要的div。出于兴趣,什么用例需要在一个HTML页面上有45k个div?您的意思是删除DOM还是只是隐藏它们?因为如果要删除它们,绕过45k div的代码也会降低页面速度。一种方法是实现某种分页,这样页面上就不会有45k div。这太疯狂了。这花了多少个月/年的时间?没有“不付出”这回事。只是不要输出那么多div。使用服务器端逻辑不写出您不需要的div。使用
$(this)
而不是
$(e.target)
@Teemu据我所知:在“直接和委派事件”下“除了能够处理尚未创建的子元素上的事件外,委托事件的另一个优点是,当必须监视许多元素时,它们的开销可能会低得多。“但是你的例子也一样,但是jQuery内置了它。请看一看。注意
this
的值,它应该总是引用事件附加到的元素。然后删除选择器,再次运行,你就会知道我的意思了。@Teemu这只是jQuery调用
。用mat应用
。”ched元素..
ret=((jQuery.event.special[handleObj.origType]| |{}).handle | | | handleObj.handler.apply(matched.elem,args);
只有一个事件处理程序..使用
$(this)
而不是
$(e.target)
@Teemu据我所知:在“直接和委托事件”下除了能够处理尚未创建的子元素上的事件外,委托事件的另一个优点是,当必须监视许多元素时,它们的开销可能会低得多。“但是你的例子也一样,但是jQuery内置了它。请看一看。注意
this
的值,它应该总是引用事件附加到的元素。然后删除选择器,再次运行,你就会知道我的意思了。@Teemu这只是jQuery调用
。用mat应用
。”ched元素..
ret=((jQuery.event.special[handleObj.origType]| |{}).handle | | | handleObj.handler).apply(matched.elem,args);
只有一个eventhandler。。