Javascript 重写这个jQuery查找选择器?

Javascript 重写这个jQuery查找选择器?,javascript,jquery,performance,internet-explorer,jquery-selectors,Javascript,Jquery,Performance,Internet Explorer,Jquery Selectors,我在IE中遇到性能问题,使用浏览器探查器,我将其缩小为: $tbody.find('> tr:not(.t-grouping-row,.t-detail-row)') 这到底意味着什么?关于如何重写它以使其在IE中性能更好(如果有意义的话,可能是纯Javascript),有什么想法 我的答案是理论性的 $tbody.children('tr').filter(function(){ var that = $(this); return (!that.hasClass('t

我在IE中遇到性能问题,使用浏览器探查器,我将其缩小为:

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

这到底意味着什么?关于如何重写它以使其在IE中性能更好(如果有意义的话,可能是纯Javascript),有什么想法

我的答案是理论性的

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

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

我的答案是理论上的

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

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

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

$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)

好的,让我们一起逐步了解这意味着什么:

$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)

类似于IE6-8 javascript引擎的问题是,如果你用这样复杂的选择器进行选择,javascript不会给你太多优势。如果您控制标记,您可以给该元素一个ID并按ID选择(使用纯JS或jQuery),这将有一个性能优势。IE6-8 javascript引擎的类似问题是,如果您使用这样复杂的选择器进行选择,javascript不会给您带来太多优势。如果您控制标记,您可以为该元素提供一个ID并按ID选择(使用纯JS或jQuery),这将带来性能优势。这意味着与当前选择器不同。例如,您的选择器将遍历$tbody的整个树,而它看起来只有一层深。要使您的方法工作,它将是
$('>tr:not(.t-grouping-row,.t-detail-row);$tbody)
,但我不确定这是否有效。这意味着与当前的选择器不同。例如,您的选择器将遍历$tbody的整个树,而它看起来只有一层深。要使您的方法工作,它将是
$('>tr:not(.t-grouping-row,.t-detail-row)',$tbody)
,但我不确定这是否有效。