想象一下这个简化的标记:
<div id="header">
<!-- Other things.... -->
<div id="detail">
</div>
</div>
并假设您已经拥有此代码:
var $hdr = $("#header");
jQuery以这种方式查找“详细信息”是否有任何速度差异:
var $detail = $("#detail", $hdr);
VS
var $detail = $("#detail");
由于ID正在查找详细信息?
答案 0 :(得分:7)
不,你不必这样做。由于id在文档中是唯一的,因此无需添加任何其他优化。
我会选择
var $detail = $("#detail");
答案 1 :(得分:6)
没有。传递上下文实际上会使速度变慢。来自jQuery的相关源代码在下面给出了解释。
这段代码基本上说:
这是剥离的来源..
init: function( selector, context ) {
...
if ( typeof selector === "string" ) {
...
// This gets ignored because we passed a context
// document.getElementById() isn't called directly
if ( match && (match[1] || !context) ) {
...
} else {
elem = document.getElementById( match[2] );
...
}
...
// Either this gets executed if a jQuery wrapped context was passed
} else if ( !context || context.jquery ) {
return (context || rootjQuery).find( selector );
}
// Or this gets executed, if a simple selector was passed as context
} else {
return jQuery( context ).find( selector );
}
...
}
match
是常规的结果数组 表达式,以找出选择器 是 HTML字符串或 id 表达。如果是HTML字符串, 然后将填充匹配[1]。 如果它是一个id(#someId),那么 将填充match[2]
。
答案 2 :(得分:2)
答案在于如何存储ID。分配的ID保存在类似哈希的数据结构中。如果搜索完全限定的ID(不是[id * =“foo”]),那么所需的定位时间应该是最快的,没有任何修饰符,因为它是直接散列查找。