重写这个jQuery查找选择器?

时间:2012-04-07 00:02:22

标签: javascript jquery performance internet-explorer jquery-selectors

我在IE中遇到性能问题并使用浏览器分析器,我将其缩小到这个:

$tbody.find('> tr:not(.t-grouping-row,.t-detail-row)')

这究竟是什么意思以及关于如何重写这一点的任何想法,以便它在IE中表现更好(如果有意义,可能是纯Javascript)?

2 个答案:

答案 0 :(得分:5)

好的,让我们一步一步看看这意味着什么:

$tbody.find('> tr:not(.t-grouping-row,.t-detail-row)')

$tbody是一个变量。它可能在此之前定义了一点。我猜它的名字意思是“表格的tbody标签”。

>表示“所有孩子”。

tr:not(.t-grouping-row,.t-detail-row)'表示“所有没有类”t-grouping-row“和”t-detail-row“的tr。

所以你的选择器是“在这个tbody中找到没有类”t-grouping-row“和”t-detail-row“的所有TR。

更好的选择器如下:

$('tr:not(.t-grouping-row, .t-detail-row)', $tbody)

但这会好一点,但仍然很糟糕。您应该查看HTML,查看您想要的内容并使用更简单的选择器,例如$('.class', $tbody)

答案 1 :(得分:1)

我的回答是理论上的。

$tbody.children('tr').filter(function(){
    var that = $(this);
    return (!that.hasClass('t-grouping-row') && !that.hasClass('t-detail-row');
})

.children.find效率更高,因为它可以查看较少的元素,此时嘶嘶声引擎停止(嘶嘶声看起来可能是你的问题)。 :not替换为.filter,它会检查属性而不是选择。