3

我对jQuery.show. 这个问题出现在 IE8 中(可能还有以下版本,但 IE8 是我感兴趣的)。

我有一个 jQuery 对象数组,让我们调用它elements。我想给他们看,所以我做了:

for (var i = elements.length - 1; i >= 0; i--) {
    elements[i].show();
}

瓶颈似乎是对show. 数组已经生成,所以不需要时间。遍历数组也不应该是一个问题。

我想show通过创建一个包含我所有元素的新 jQuery 元素来减少一次调用。但我不知道该怎么做。我试过了jQuery.add

var $elements = elements[0];
for (var i = elements.length - 1; i >= 1; i--) {
     $elements = $elements.add(elements[i]);
}
$elements.show();

现在,这一次似乎是一个问题jQuery.add。可能是因为它总是创建一个新对象。

所以,我想到了三种不同的方法来解决我的问题。也许你可以帮助我其中之一:

  • 是否有这样的 jQuery 方法add不返回新对象,而是将其添加到当前的 jQuery 元素中?
  • 有没有一种简单快捷的方法来通过一组 jQuery 元素创建一个 jQuery 元素?
  • 有没有办法以show更快的方式处理数组中的所有 jQuery 对象?

只回答一个问题可能会对我有所帮助。我的问题是,jquery在其方法中总是需要一个数组DOM elements而不是数组。jQuery elements

提前非常感谢!

-- 编辑内容elements

我有一个动态创建节点(即li元素)的jstree。这些元素具有data-id标识它们的属性。现在,我总是可以查询 $('li[data-id=xxx]') 之类的东西,但这会很慢。因此,相反,当li创建元素时,我将它们缓存到类似对象的字典中(键是数据 ID,值是节点)。在这个对象之外,我生成了我的数组elements。这发生得非常快。阵列的大小最多可达 4000 个节点。数组中的每个 jQuery 元素只包含一个 DOM-Element ( li)。

4

1 回答 1

3

编辑

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

elements.each($.fn.show);

使用 jQ each 方法将(好吧,内部: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<elements.length;i++)
{
    console.log(elements[i]);//logs a DOMElement, not a jQuery object
}
//It's the same as doing:
console.log(elements[0]);
//or even:
console.log($('.someClass').get(0));

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

elements.each($.fn.show);//use the show method as callback
于 2012-10-17T09:08:44.480 回答