[英]jquery - fastest selector knowing the first 2 parents
我有以下设置:
var el = $("#overParent");
// Do whatever with el here.
var cls = $(".valueElement", "#parent"); // Get elements with class valueElement inside element with id parent
// Do whatever
这是可行的,但我想知道是否可以加快速度。 我知道#parent
是#overParent
中已被选择的元素。 我可以用某种方式仅扫描el #overparent
的#parent
然后获取具有指定类的元素吗?
类似于: $(".valueElement", "#parent", el)
但根据文档, $
仅接受2个参数。
如果要通过ID查找元素,则只需使用:
var $element = $('#id');
不提供任何上下文搜索将永远是最快的方法。
同样,在此处提供ID作为搜索上下文的地方,则"#parent"
是最快的选择器。 从理论上讲,您可以使用"#overParent > #parent"
来实现您的意思,但实际上这意味着要做更多的工作,而且速度会更慢。
像'#theId'
这样的选择器不会使jQuery扫描文档,因为它使用document.getElementById
。
如果要查找知道其ID的元素,即使您知道其父元素,也请始终使用$('#theid')
。
实际上,如果您提供父对象作为上下文,则jQuery将调用document.getElementById
然后检查父对象是否包含找到的元素。 因此,这要慢得多。
从源代码:
// Speed-up: Sizzle("#ID")
if ( (m = match[1]) ) {
if ( nodeType === 9 ) {
elem = context.getElementById( m );
// Check parentNode to catch when Blackberry 4.6 returns
// nodes that are no longer in the document #6963
if ( elem && elem.parentNode ) {
// Handle the case where IE, Opera, and Webkit return items
// by name instead of ID
if ( elem.id === m ) {
results.push( elem );
return results;
}
} else {
return results;
}
} else {
// Context is not a document
if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
contains( context, elem ) && elem.id === m ) {
results.push( elem );
return results;
}
}
同样,如果要选择一个类的所有元素,请不要指定父级,这无济于事。
在您的情况下,由于您似乎想使用父项来限制集合,因此只需使用
$(".valueElement", "#parent");
只需坚持使用常规id选择器即可:
$('#element');
即使您已经选择了父元素,它仍然是最快的: http : //jsperf.com/id-test-123
我只是在猜测,但是我认为浏览器使用查找表通过其id属性查找元素。
根据文档 ...
var el = $("#overParent");
这是极其有效的,它附加了另一个选择器。
对于id选择器,jQuery使用JavaScript函数document.getElementById(),这非常高效。 当另一个选择器附加到id选择器(例如h2#pageTitle)时,jQuery在将元素标识为匹配项之前执行附加检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.