在我正在编写的 Web 应用程序中,我有一系列创建网格的 div。网格是 X div x Y div,基于用户输入。使用jQuery悬停功能,我想改变一定距离内所有周围div的背景颜色。基本上,如果我将鼠标悬停在一个 div 上,则 4 行 4 列内的所有 div 也应该改变它们的背景颜色。我可以正常运行,但是当网格变为 32 x 128 div 时,就会出现真正的性能问题,并且悬停效果明显滞后于鼠标。我几乎可以肯定这是因为 DOM 中有大量类似的 div,因为当网格是 30 x 30 时,问题就不存在了。
这是我的html的基本结构:
<div class="table_area">
<div class="table_row" id="row-0">
<div class="cap" data-row="0" data-column="0"></div>
<div class="cap" data-row="0" data-column="1"></div>
...
</div>
<div class="table_row" id="row-1">
<div class="cap" data-row="1" data-column="0"></div>
<div class="cap" data-row="1" data-column="1"></div>
...
</div>
...
</div>
为了加快 DOM 的搜索速度,我将每一行添加到一个数组中。因此,$('div.table_row[data-row="0"]')
将在arr[0]
. 因此,当div
第 8 行中的 a 悬停时,我只检查必要arr[4]
的arr[12]
div。
我认为这会大大加快这个过程,因为我消除了大量的搜索,但悬停仍然有一个非常明显的滞后。
我的设置方式有什么明显的错误吗?如果这很重要,我正在使用最新版本的 Chrome。