2010-01-13 25 views
0

我有一些HTML下拉菜單,然後依賴於選擇,然後突出顯示錶中相應的列標題。我這樣做是通過更改CSS類<td>標籤,像這樣:在Internet Explorer中的jquery attr()函數速度

$("#searchcolour").attr("class", "filledselect"); 
$("#searchtask").attr("class", "filledselect"); 
$("#searchshape").attr("class", "filledselect"); 
$("#searchpivot").attr("class", "filledselect"); 

突出顯示的列標題取決於哪些已選定。可以選擇多達20個列標題。這個額外的高亮代碼在IE中更新我的頁面時會延遲1-2秒(jquery也會同時過濾表格結果)。其他瀏覽器的速度很好。

有沒有更快的方法可以達到這種效果?

回答

0

試試這個:

$("#searchcolour").addClass("filledselect"); 
$("#searchtask").addClass("filledselect"); 
$("#searchshape").addClass("filledselect"); 
$("#searchpivot").addClass("filledselect"); 
+0

但是依賴於選擇,我將類更改爲新值,或將其重新設置爲原始類值。我不想添加一個類。 – 2010-01-14 11:20:53

0

這取決於你如何的選擇映射到表單元格上。但是我敢肯定,如果您使用像您的示例狀態這樣的ID選擇器,則不會花費1-2秒,因此必須有另一個瓶頸。

爲什麼不將一個屬性應用於與表ID相匹配的每個菜單項?

<ul id="menu"> 
    <li><a href="#" rel="searchcolour">colour</a></li> 
    <li><a href="#" rel="searchtask">task</a></li> 
</ul> 

<script> 
$('#menu a').click(function() { 
    $('#'+this.rel).addClass('filledselect'); 
}); 
</script> 

另一種方式來優化現有代碼:

var $searchcolour = $("#searchcolour"); 
var $searchtask = $("#searchtask"); 
var $searchshape = $("#searchshape"); 
var $searchpivot = $("#searchpivot"); 

... 
    $searchcolour.attr("class", "filledselect"); 
    $searchtaskattr("class", "filledselect"); 
    $searchshape.attr("class", "filledselect"); 
    $searchpivot.attr("class", "filledselect"); 

或者:

$(['colour','task','shape','viot']).each(function() { 
    $('#search'+this).addClass('filledselect'); 
}); 
+0

我試過刪除所有的attr()函數調用,並且在IE中確實需要更長的時間,甚至使用ID選擇器。 – 2010-01-14 11:22:15

0

你可以緩存列選擇這樣的DOM元素不必每次都發現而不是選擇每一列,你可以只添加一組類到表中。

所以做$('#id_for_table')。attr('class','highlight-c1 highlight-c3')並將類c1,c2等添加到您想要突出顯示的單元格中。然後讓CSS是這樣的:

.hightlight-c1 .c1, 
.hightlight-c2 .c2, 
.hightlight-c3 .c3, 
etc...    { ... } 

或者你可以後他們的名字下拉選項,所以你只有一個類添加到表中,但要強調的細胞將有類各降下來,他們應突出對於。