Jquery - 获得儿童元素的最快方式

时间:2014-10-06 10:43:31

标签: javascript jquery performance dom jquery-selectors

我的工作要求我经常使用jquery。 由于我总是试图找到更好的方法来做事,我想提高javascript级页面的性能。

所以我想知道在Jquery中获取DOM元素的特定子元素的最快方法是什么?

假设我们有这样的话:

parent
|-element 1
|-element 2
|-parent element 1
|---element A
|---element B
|-parent element 2
|---element C
|-element 3

以下哪种方法最适合获取每个特定元素,假设dom树的第一个分支中的每个元素都有一个可识别的id或类与其他元素不同,并且对哪种元素没有限制他们是?


方法1:

让每个元素都有自己的选择器:

var element1 = $(".element1");
var element2 = $(".element2");
...

方法2:

使用父元素获取每个元素:

var parent = $(".parent");
var element1 = parent.children('.element1');
var element2 = parent.children('.element2');
...

方法3:

将整个事物放入数组并通过它解析:

var elements = $(".parent").children();
var element1 = elements[0];
var element2 = elements[1];
var elementA = elements[2].children('elementA');
// or maybe like this?
// var elementA = elements[2].children()[0];
...

在提出的dom树上,我还包括嵌套的父母和孩子。 哪种方法最适合那些方法,特别是如果它们没有唯一标识符?

例如关于dom树的介绍: 获取这样的元素会更快(假设父元素没有唯一标识符):

var elementA = $(".parent").children(".parent-element-1").children(".elementA")

var elementA = $(".parent").find('.elementA')


如果还有其他任何方式(除了通过sizzle调用元素)来获取元素,请告诉我有关它的信息:)

我知道我可以通过javascript单独调用元素,但是有几百个dom元素,这样的任务可能会超出我通常的时间范围 - 或者这个标准是什么?


编辑:

嘶嘶声很慢:http://jsperf.com/sizzle-is-slow/2

我要问的是正确使用jquery / javascript方法。

1 个答案:

答案 0 :(得分:0)

通过ID获取将始终是最快的(如果您可以在您的层次结构中设计),因为ID在浏览器快速查找字典中。类需要更多迭代,因为它支持倍数。我通过Google发现的结果表明ID查找的速度是使用类查找元素的两倍。

您可以使用ID的分层命名:

parent - ID= P1
|-element 1 - ID = P11
|-element 2 - ID = P12
|-parent element 1 - ID= P13
|---element A - ID = P131
|---element B - ID = P132

注意:我并不是建议使用这种组织元素或最佳使用jQuery的方法,而是为了解决所列特定问题的大幅度提升:)