我一直在運行一些測試,看看我是否能夠找到一個有效的選擇器控件前綴的Asp.Net父控件的ID任何人都可以擊敗這個jQuery選擇器?
我一直在尋找這個,因爲我是可以選擇從外部JavaScript文件的Asp控件(我厭倦了使用ClientID)。
爲了測試我設置了一個包含150個文本框的頁面,所有這些頁面都帶有cssclass「speedy」和一個單獨的id,並運行以下代碼來選擇第107個文本框。
function testclientInput() {
var iterations = 100;
var totalTime = 0;
// Record the starting time, in UTC milliseconds.
var start = new Date().getTime();
// Repeat the test the specified number of iterations.
for (i = 0; i < iterations; i++) {
// Execute the selector. The result does not need
// to be used or assigned to determine how long
// the selector itself takes to run.
// All tests done in ie6, ie7, ie8, ie9beta, firefox3.6, opera11 & chrome8
// slowest
// $('input.speedy[id$=_TextBox107]');
// Quick but only useful if you know the index.
//$($('input.speedy')[106]);
//$('[id$=_TextBox107]:first');
//$('input[id$=_TextBox107]');
//$.clientID("TextBox107");
//$('[id$=_TextBox107]');
//$('input[id$=_TextBox107]:first');
//$($('[id$=_TextBox107]')[0]);
// Fastest
//$($('input[id$=_TextBox107]')[0]);
}
// Record the ending time, in UTC milliseconds.
var end = new Date().getTime();
// Determine how many milliseconds elapsed
totalTime = (end - start);
// Report the average time taken by one iteration.
alert(totalTime/iterations);
};
這是我想到的最好的。 $($('input[id$=_TextBox107]')[0]);
。結果令人驚訝......我期望使用:first
選擇器來匹配我的版本,但它報告的結果要慢得多。
任何人都可以想出一種方法來優化呢?
對不起,爲什麼不能使用`document.getElementById('_ TextBox107')`? ID無論如何都應該是唯一的 – Harmen 2011-01-06 20:16:08
@Harmen:他使用*屬性以*選擇符結束,所以`_TextBox107`只是ID的最後部分。 – user113716 2011-01-06 20:17:23
@Harmen:因爲asp控件的前綴是他們的父ID。我在我的問題中說明了這一點。 – 2011-01-06 20:19:24