【问题标题】:Jquery - Fastest way to get children elements [closed]Jquery - 获取子元素的最快方法[关闭]
【发布时间】: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 方法获取它慢吗?这就是为什么我忽略了这些选项
  • 但是sizzlejQuery 库的一部分。与元素选择完全一致的部分。但我明白你的意思。
  • 我觉得这个问题应该移到Code Review Stack Exchange

标签: javascript jquery performance dom jquery-selectors


【解决方案1】:

按 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,而只是作为一种针对所概述的特定问题大幅提高速度的方法:)

【讨论】:

  • 我知道这只是一个例子,但是分层命名需要使用分隔符(即 P1-3)来区分第十三项(P13)和第一项的第三个子项(P13 )
  • @Adam Hopkinson:或者只是每个级别的固定位数? P010203
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
  • 2018-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多