我有在IE瀏覽器的性能問題,並使用瀏覽器探查,我把範圍縮小到這一點:重寫這個jQuery查找選擇器?
$tbody.find('> tr:not(.t-grouping-row,.t-detail-row)')
是什麼恰恰意味着以及如何重寫任何想法,因此執行在IE(更好也許純Javascript如果它是有道理的)?
我有在IE瀏覽器的性能問題,並使用瀏覽器探查,我把範圍縮小到這一點:重寫這個jQuery查找選擇器?
$tbody.find('> tr:not(.t-grouping-row,.t-detail-row)')
是什麼恰恰意味着以及如何重寫任何想法,因此執行在IE(更好也許純Javascript如果它是有道理的)?
好吧,讓我們一起看步步這意味着什麼:
$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)
。
這意味着與他當前的選擇器不同。例如,您的選擇器將遍歷$ tbody的整個樹,而他的唯一一個深度只有一層。 – Fresheyeball 2012-04-07 00:15:50
爲你的方法工作將是'$('>> tr:not(.t-grouping-row,.t-detail-row)',$ tbody)''但我不確定這是否有效。 – Fresheyeball 2012-04-07 00:19:33
我的回答是理論上的。
$tbody.children('tr').filter(function(){
var that = $(this);
return (!that.hasClass('t-grouping-row') && !that.hasClass('t-detail-row');
})
.children
比.find
更有效,因爲它具有更少的元素翻閱,在這一點上的噝噝聲發動機停止(嘶嘶看起來像它可能是你的問題)。 :not
被替換爲.filter
,它將檢查屬性而不是選擇。
類似問題http://stackoverflow.com/questions/4398771/javascript-slow-in-ie-but-fast-in-firefox IE6-8 JavaScript引擎只是很慢 – 2012-04-07 00:04:47
純JavaScript不如果你用這樣一個複雜的選擇器進行選擇,會給你帶來很大的優勢。如果你在控制標記,你可以給這個元素一個ID,並通過ID選擇(無論是普通的JS或jQuery),這將有一個性能優勢。 – 2012-04-07 00:08:53