0

我有在IE瀏覽器的性能問題,並使用瀏覽器探查,我把範圍縮小到這一點:重寫這個jQuery查找選擇器?

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

是什麼恰恰意味着以及如何重寫任何想法,因此執行在IE(更好也許純Javascript如果它是有道理的)?

+1

類似問題http://stackoverflow.com/questions/4398771/javascript-slow-in-ie-but-fast-in-firefox IE6-8 JavaScript引擎只是很慢 – 2012-04-07 00:04:47

+0

純JavaScript不如果你用這樣一個複雜的選擇器進行選擇,會給你帶來很大的優勢。如果你在控制標記,你可以給這個元素一個ID,並通過ID選擇(無論是普通的JS或jQuery),這將有一個性能優勢。 – 2012-04-07 00:08:53

回答

5

好吧,讓我們一起看步步這意味着什麼:

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

$tbody是一個變量。這可能是在此之前定義的。我猜它的名字意味着「表格的tbody標籤」。

>的意思是「所有的孩子」。

tr:not(.t-grouping-row,.t-detail-row)'意味着T-分組行‘和「T-細節排‘所有不具備類TR’’。

所以,你選擇的是」發現這TBODY所有TR是沒有「t-grouping-row」和「t-detail-row」類。

一個更好的選擇將是如下:

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

但是,這將是剛剛好一點,仍然不好。你應該檢查你的HTML,看看你想要什麼,並使用更簡單的選擇器,如$('.class', $tbody)

+0

這意味着與他當前的選擇器不同。例如,您的選擇器將遍歷$ tbody的整個樹,而他的唯一一個深度只有一層。 – Fresheyeball 2012-04-07 00:15:50

+0

爲你的方法工作將是'$('>> tr:not(.t-grouping-row,.t-detail-row)',$ tbody)''但我不確定這是否有效。 – Fresheyeball 2012-04-07 00:19:33

1

我的回答是理論上的。

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

.children.find更有效,因爲它具有更少的元素翻閱,在這一點上的噝噝聲發動機停止(嘶嘶看起來像它可能是你的問題)。 :not被替換爲.filter,它將檢查屬性而不是選擇。