【发布时间】:2012-10-17 17:08:44
【问题描述】:
我对@987654321@ 的性能有一点问题。 这个问题出现在 IE8 中(可能还有以下版本,但 IE8 是我感兴趣的)。
我有一个 jQuery 对象数组,我们称之为elements。
我想给他们看,所以我做了:
for (var i = elements.length - 1; i >= 0; i--) {
elements[i].show();
}
瓶颈似乎是对show 的调用。数组已经生成,所以不需要时间。遍历数组也不应该是个问题。
我想通过创建一个包含我所有元素的新 jQuery 元素来减少对 show 的一次调用。但我不知道该怎么做。我试过jQuery.add。
var $elements = elements[0];
for (var i = elements.length - 1; i >= 1; i--) {
$elements = $elements.add(elements[i]);
}
$elements.show();
现在,这一次似乎是jQuery.add 的问题。可能是因为它总是创建一个新对象。
所以,我想到了三种不同的方法来解决我的问题。也许你可以帮我做一个:
- 有没有像
add这样不返回新对象,而是将其添加到当前jQuery 元素的jQuery 方法? - 有没有一种简单快捷的方法来通过一组 jQuery 元素创建一个 jQuery 元素?
- 有没有办法以更快的方式
show数组中的所有 jQuery 对象?
只回答一个问题可能会对我有所帮助。我的问题是,jquery 在其方法中总是需要一个 DOM elements 数组,而不是 jQuery elements 数组。
提前非常感谢!
-- 编辑elements的内容
我有一个动态创建节点的jstree(即li 元素)。这些元素有一个属性data-id 来识别它们。
现在,我总是可以查询 $('li[data-id=xxx]') 之类的东西,但这会很慢。因此,相反,当创建li 元素时,我将它们缓存到一个类似对象的字典中(键是数据 ID,值是节点)。从这个对象中,我生成了我的数组elements。这发生得非常快。
阵列的大小最多可达 4000 个节点。数组中的每个 jQuery Element 只包含一个 DOM-Element (li)。
【问题讨论】:
-
也许您想将所有这些元素添加到一个 div(或类似的)然后显示该 div?
-
@alexandernst 乍一看,这在我的情况下可能会变得复杂,因为它们是
jstree的一部分。不过我会记住这个建议,也许当我没有其他想法时我会尝试一下。谢谢! -
你能告诉我们
elements的内容吗? -
@Chips 您可以将这些元素添加到 DOM 树中。浏览器只显示那里的节点。 Javascriptvariables 只包含几个位。所以我认为来自 alex 的想法是一个好方法。
-
另请注意,使用
.show()和.hide()比使用.css('display', '')和.css('display', 'none')更昂贵
标签: javascript jquery arrays