在 jQuery 对象数组上调用 show

2024-03-22

我有一个关于性能的小问题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

我有一个动态创建节点的 jstree(即li元素)。这些元素有一个属性data-id来识别他们。 现在,我总是可以查询类似 $('li[data-id=xxx]') 的内容,但这会非常慢。所以相反,当li创建元素后,我将它们缓存到类似字典的对象中(键是数据 ID,值是节点)。从这个对象中,我生成了我的数组elements。这发生得非常快。 该阵列的大小最多可达 4000 个节点。数组中的每个 jQuery 元素仅包含一个 DOM 元素 (li).


Edit

阅读您的更新和评论后,Very简短的一句台词很可能就是答案:

elements.each($.fn.show);

使用 jQ every 方法来应用(好吧,在内部: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
});

但话说回来:你say elements是 jQ 对象的数组,但如果它是选择器的返回值 ($('.someClass'))那么实际上,它不是:在这种情况下,你的循环是"broken":

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方法上each对于他们每一个人,我怀疑这是最好的选择:

elements.each($.fn.show);//use the show method as callback
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 jQuery 对象数组上调用 show 的相关文章