在jQuery对象数组上调用show

关于jQuery.show性能我有一点问题。 在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元素时,我将它们缓存到像对象这样的字典中(key是data-id,value是节点)。 在这个对象之外,我生成了我的数组elements 。 这发生得非常快。 该arrays的大小最多可达4000个节点。 数组中的每个jQuery元素只包含一个DOM-Element( li )。

编辑

在阅读了您的更新和评论后,这个非常小的单行内容很可能就是答案:

 elements.each($.fn.show); 

使用jQ将每个方法应用于(所有内部:使用callshow方法到所有元素。


从jQuery对象数组创建jQuery对象的最简单,最快捷的方法是:

 var objFromArr = $(jQarr); 

我刚刚在控制台中对此进行了测试:

 objFromArr = jQuery([jQuery('#wmd-input'),jQuery('#wmd-button-bar')]); objFromArr.each(function() { console.log(this);//logs a jQ object console.log(this[0]);//logs the DOMElement }); 

但是说过:你 elements是一个jQ对象的数组,但是如果它是选择器的返回值( $('.someClass') )那么真的,它不是:在这种情况下,你的循环是“破碎的” “

 elements = $('.someClass'); for (var i=0;i 

但最后,如果你有一个jQuery对象数组,并且你想在每个对象上调用show方法,我怀疑这是最好的选择:

 elements.each($.fn.show);//use the show method as callback