jquery选择器问题,例:找div元素 $("divid")和$("div[id="divid"]") 哪个性能高。

很想了解jquery在使用中的性能效率。又比如说找<input type="button" /> $("buttonid")与$("input:button[id="buttionid"]") 哪个性能好呢?求高手真心回答!

你举着个例子里面,直接查ID最快。
因为ID是唯一的。比如你现在的DOM树一共有200个元素。
用第一种方法,直接查ID,可能选择器查询到第120个元素,就查到了ID符合的。然后因为ID是唯一的,选择器不用继续再查下去了,直接返回结果。这样进行的查找量就是120.
如果用第二种方法你先查符合input:button的。再查ID。表面上看是用两个条件限定范围。但因为input:button这种属性不是唯一的。选择器向下查询到一个后不会停,因为可能还有其他input:button,就只好继续查。直到遍历完所有200个元素才算完成第一次查询。然后再在返回的符合条件的结果中选择ID。比如一共有10个button,就又要在10个里面查,比如这次查到第6个ID符合。你第二种方法进行的查找量就是200+6=206.追问

您好,谢谢你能回答这么多,对我收获很大。 我还想问一个问题,像你上面根据ID直接找元素打的比方,在第120个元素,我认为他的查找量是240次,因为元素是120次,再每个元素判断id是否等于divid. 又是120次,最终是240次 。 $("input:button[id="buttionid"]") 这个的看法我倒是和你一样。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-05
前者性能高,因为id是唯一的,而$("div[id="divid"]") 会遍历所有div的,找到属性id=divid的那一个
第2个回答  2012-12-05
应该是 $("#divid")
$查找元素的时候,id 查找是最快的:$("#divid"),
其次元素名称,$("div"),
伪类查找是最慢的:$(".class1")追问

。。。 别说应该啊! 我问的人都说应该,难道没有一个高手能肯定的指出一个且说出为什么?

追答

jQuery的文档,就这么写的,
你上面写错了,我给你纠正的,

追问

我没看见jquery文档有提到这一点的啊。我认为$("divid") 会一个个元素的去找id=divid的,而$("div[id='divid']")只会去找页面中元素且id=divid的。 那应该是$("div[id='divid']")更快,因为他省去了找div以外元素的时间

本回答被网友采纳
第3个回答  2012-12-05
$("#divid")高
$("input:button[id="buttionid"]")是用于精准定位的
相似回答