【问题标题】:reducing MASSIVE amounts of child elements减少大量子元素
【发布时间】:2013-12-20 01:48:50
【问题描述】:

我使用了很多包含 100 个子元素的父 div 容器,有些甚至有 500 个子元素。

<div id="px">
<div> icon1 </div>
<div> icon2 </div>
... +98
</div>

<div id="content">
<div> images, text.. etc </div>
<div> images, text.. etc </div>
... +98
</div>

我这样做的原因是我可以使用 1 个单独的 jquery 代码为每个子元素指定一个 mouseenter 事件,然后根据该子选择显示一些内容:

$("#px >").mouseenter(function() {

index = (this).index();    

$("#content :eq("+index+")").css("display","block"); });

有没有更好的方法来做到这一点或减少所需的标记/css?因为我的 html 和 css 会长得离谱,而且可能表现得很糟糕。

【问题讨论】:

  • 真的有性能问题吗?如果您需要可见的不同元素,那么您需要可见的不同元素。虽然这里可能会使用 Canvas 甚至 SVG,但这最终会改变整个显示和交互。或者,也许任何时候都应该显示(即甚至创建)数据的一个子集..
  • 如果存在不可接受的性能问题,这只是“太大” - 我希望现代桌面浏览器能够处理数千个节点;仅在这个简单的页面上就有超过 1k+。无论如何,数据必须在某个地方。从 JavaScript 对象或 XHR 请求(实际上只是“分页”的一种形式)动态创建(显示的)DOM 是一种方法..

标签: jquery html nested children


【解决方案1】:

假设您可以更改正在生成的标记,我建议使用数据属性呈现标记,如下所示:

<div id="px">
<div class="icon" data-target="icon1-tgt"> icon1 </div>
<div class="icon" data-target="icon2-tgt"> icon2 </div>
... +98
</div>

<div id="content">
<div id="icon1-tgt"> images, text.. etc </div>
<div id="icon2-tgt"> images, text.. etc </div>
... +98
</div>

并将 js 处理程序更改为以下版本: 请注意,我使用on 进行事件绑定,它减少了绑定的事件侦听器的数量。检查http://24ways.org/2011/your-jquery-now-with-less-suck/的“事件委托”部分

$("#px").on("mouseenter", "div.icon", function(evt) {
    var target = $(this).data("target");
    $("#" + target).css("display","block"); 
});

【讨论】:

  • 谢谢,但我正在努力寻找一种不使用这么多子元素的方法。我担心 html 的大小/性能,如果它包含大约 1200 个子元素,并且都具有不同的样式。有什么办法可以减少容器中的元素?
  • @user3121103 让我问你,为什么要在一个页面上显示 1200 个元素并为每个元素分配一个行为?如果没有深入了解需要实现的目标,我很难提供任何进一步的意见。
  • @user3121103 嗯...我想不出任何其他方法来实现您要实现的目标...
  • 我只需要减少子元素。也许我应该使用json或xml来存储所有内容,然后检索它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多