2011-10-27 45 views

回答

2

这真是个人喜好。从编码的角度来看,并没有真正的优势。根据jQuery的.find()文档:

选择器上下文用.find()方法实现;因此, $('li.item-ii')。find('li')等价于$('li','li.item-ii')。

个人观点:由于$('myTable tr')是更简洁,还是非常具有可读性,这是我的偏好。

0

$('myTable tr')在幕后自动转换为$('myTable').find('tr'),所以后者更快。

0

我认为$('myTable tr')仅仅是$('myTable').find('tr')的快捷方式 - 所以你最好使用find()而不是上下文参数。通过使用find(),你正在消除一个很好的函数调用;)

1

我认为这只是个人喜好的问题。
从技术上来说,find方法应该更快,因为第一个是翻译为find语法。
我不认为你应该关心哪一个更快。你应该使用最适合你的应用的那个。举例来说,如果你要拨打的主要对象更多的方法,你应该使用find

$('myTable') 
    .aTableMethod() 
    .find('tr') 
     .aTrMethod() 
     .end() 
    .someOtherTableMethod(); 

在另一方面,如果你只是想选择一个对象的孩子,你不会做任何事情与对象本身,你应该坚持复杂的选择:

$('parent child'); 

我的建议是选择在未成年人(未成年人真)优化可读性,除非你有严格的规范这样做。这样你的代码更容易明白,调试保持

0

识别节点的最快方式是通过id(例如, $('#myTable')。接下来,第二个示例将只调用一次kQuery解析器,而第一个示例将调用两次 - 第二个示例更快。

1

现实世界中的差异很小,但find略快(至少在Chrome中)。下面是从benchmark结果:

enter image description here

注意的是,测试使用table,而不是myTable,因为我认为这是你的原意。

另外请注意,即使它看起来像上面截图中的巨大差异,但它并不重要。

+0

Chromium 17和Opera 11.52给出了不同的结果。 Firefox 7.0.1使它们成为正方形。 – Beniamin

0

一般来说,简单的选择是最快的,如。 #myId.myClass。这是因为它们被翻译为原生浏览器功能getElementByIdgetElementsByClassName

因此,首先找到父元素,然后使用find应该稍微快一些。有关更多信息,请参见here

相关问题