我想知道哪个选项更好,特别是在速度方面:
$('#id tag')...
要么
$('#id').find('tag')...
此外,如果您将id和/或标签更改为类,或类似输入的内容,那么相同的答案是否适用?
例如,哪个更好:$(‘#id input:checked’)…或$(‘#id’)。find(‘input:checked’);?
解决方法
你可以根据你的决定3件事情:
可读性
这与您的两个给定的选择器没有太大的区别。对我来说,我更喜欢$(‘#id’)。find(‘inner’)语法,因为它更准确地描述了它正在做什么
可重用性
如果您的代码的其他部分使用相同的id选择器(或其上下文中的某个),则可以缓存选择器并重新使用它。我自己很难重写已经写过这样的$(‘#id inner’)的代码,因为你必须首先解码css选择器,然后才能继续下去并找到可能的改进。
想象这两种情况并不复杂
$('#hello .class_name tag').doThis(); $('#hello .other_name input').doThat();
而另一种情况
$('#hello').find('.class_name tag').doThis(); $('#hello').find('.other_name input').doThat();
我认为第二个例子尖叫着你«缓存id选择器»,而第一个不。
速度
性能始终是一个好点,在这种情况下,在大多数浏览器中,具有查找功能的id选择器做得更好,因为它首先建立了上下文,并且可以将降序选择器应用于较小的元素子集。
Here’s a good performance test,if you want to know more about context-vs subset selectors performance in jQuery. ids的子集通常规则。当然,你可以得到不同的结果,但在大多数情况下,他们会做到。
所以,从我的角度来看,对于子集选择器,3到0。