我想知道选择一个位于具有ID的元素内的元素类的速度更快。例如,假设我们有一个列表,ul
id="list"
和li
元素class="list"
,然后更快(和/或更好的做法):
document.GetElementById('list').getElementsByClassName('list')
或
document.getElementsByClassName('list')
我知道前者只会定位#list
元素中的元素,让我们假设该类对整个文档是唯一的。
答案 0 :(得分:3)
getElementsByClassName是一个O(n)操作,因为它必须检查每个元素以检查是否存在要检查的类名。如果n
有限,则速度会增加,但速度差异只会很小,因为整个操作速度仍为O(n)。
结果,这是微优化的一个例子。两者都没有明显更快。使用子选择器应该与页面组成相关,以便在速度考虑方面区分页面的样式部分。
答案 1 :(得分:0)
第一个应该是最快的,因为按类名检索元素将被限制在该列表元素中。但是,它取决于浏览器如何在内部索引元素。
您可以在此处运行一些基准:http://jsperf.com/javascript-select-by-id-vs-by-class
在我的测试中,第二种方法在chrome和IE上更快,但在FF上大致相同。这意味着基于课程名称和FF的Chrome和IE索引元素大部分都没有或者做得不好。