查找表行的这两种jQuery方法中哪一种更快?

时间:2011-10-27 10:26:21

标签: jquery

使用jQuery,我可以通过以下方式找到表行。

哪一个更快?或者没有太大区别?

$('myTable').find('tr')

$('myTable tr')

7 个答案:

答案 0 :(得分:2)

这真的是个人喜好。编码视角没有真正的优势。根据jQuery的.find()文档:

  

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

个人意见:由于$('myTable tr')更简洁且仍然非常易读,因此我更喜欢。

答案 1 :(得分:1)

我认为这只是个人偏好的问题 从技术上讲,find方法应该更快,因为第一个方法是翻译find语法。
我不认为你应该关注哪一个更快。您应该使用最适合您的应用的那个。例如,如果要在主对象上调用更多方法,则应使用find

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

另一方面,如果你只想选择一个对象的子节点而你不打算对该对象本身做任何事情,你应该坚持使用复杂的选择器:

$('parent child');

我的建议是选择可读性而不是次要(非常小)的优化,除非你有严格的规范要求。这样您的代码就更容易理解调试维护

答案 2 :(得分:1)

现实世界的差异很小,但find稍快一点(至少在Chrome中)。以下是benchmark

的结果

enter image description here

请注意,该测试使用table代替myTable,因为我认为这是您的意图。

另请注意,即使它在上面的屏幕截图中看起来有很大差异,但它确实不重要。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我认为$('myTable tr')只是$('myTable').find('tr')的快捷方式 - 所以最好使用find()而不是上下文参数。通过使用find(),您将消除一个始终良好的函数调用;)

答案 5 :(得分:0)

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

答案 6 :(得分:0)

一般来说,简单的选择器是最快的,例如。 #myId.myClass。这是因为它们已转换为本机浏览器功能getElementByIdgetElementsByClassName

因此,首先找到父元素然后使用find应该稍快一点。有关详细信息,请参阅here