【发布时间】:2014-11-30 14:44:24
【问题描述】:
我的工作需要我经常使用 jquery。 由于我一直在努力寻找更好的方法来做事,所以我想提高页面 javascript 级别的性能。
所以我想知道在 Jquery 中获取特定子元素的最快方法是什么?
假设我们有这样的:
parent
|-element 1
|-element 2
|-parent element 1
|---element A
|---element B
|-parent element 2
|---element C
|-element 3
以下哪种方法最适合获取每个特定元素,假设 dom 树的第一个分支中的每个元素都具有与其他元素不同的可识别 id 或类,并且对什么样的元素没有限制他们是?
方法一:
使用自己的选择器获取每个元素:
var element1 = $(".element1");
var element2 = $(".element2");
...
方法二:
这样获取每个元素的父元素:
var parent = $(".parent");
var element1 = parent.children('.element1');
var element2 = parent.children('.element2');
...
方法三:
在数组中获取整个内容并通过它进行解析:
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')
?
另外,如果有任何其他方式(通过嘶嘶声调用元素除外)来获取元素,请告诉我:)
我知道我可以单独通过 javascript 调用元素,但是如果有几百个 dom 元素,这样的任务可能会超出我通常的时间范围 - 或者这是标准吗?
编辑:
嘶嘶声很慢:http://jsperf.com/sizzle-is-slow/2
我要问的是正确使用 jquery/javascript 方法。
【问题讨论】:
-
使用jsperf.com创建基准测试...
var elementA = $(".parent .elementA') -
您忘记在选项列表中添加两种方式:
$('.elementA', '.parent')和$('.parent .elementA') -
不是嘶嘶声类型的调用元素比通过 jquery 方法获取它慢吗?这就是为什么我忽略了这些选项
-
但是
sizzle是jQuery库的一部分。与元素选择完全一致的部分。但我明白你的意思。 -
我觉得这个问题应该移到Code Review Stack Exchange
标签: javascript jquery performance dom jquery-selectors