选择器一般都有两种办法,一种普通的顺序查找方法,比如:
<div style="width:500px;">
<ul>
<span>span (子节点)</span>
<li>li (子节点)
<span>span (孙节点)</span>
</li>
</ul>
</div>
$(document).ready(function(){
$("ul").find("span").css({"color":"red"});
});
结果:
这种 a().b()这种先执行前者后执行后者是由js的求值顺序决定的,所以只能是先前再后。如果不先求值a(),我们自然也就不能知道b()该在那个对象上面调用。
第二种:$(.class > span)
,这种就叫做过滤法,会先去查找span,然后判断查找出来的元素的父元素有没有该class,这个的好处就是不需要去重和排序两到工序,大部分选择器引擎都是过滤法。
个人感觉过滤法只需要经过一次查找,得到结果之后,剩下只需要过滤操作就可以了,这样在大部分情况下都可以在一开始就得到比较小的结果集,所以相对效率较高。但是如果通过*之类的选择符,那就不行了,本身*这样的选择是就是包含所有的内容,自然就效率较差。
除此以外,其中CSS选择器中的#id > .class也是同样的道理。