在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将每个方法应用于(所有内部:使用call
) show
方法到所有元素。
从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