2011-05-06 42 views
2

我需要知道從下拉列表中刪除數百個選項的最快方法。刪除下拉選項性能問題

現在,Firefox更新我的第二個下拉動態列表非常慢。 Chrome正在做的劇本OK,但我需要加快我的去除:

<select id="myDropDown" name="myDropDown"> 
<option value=1>1</option> 
<option value=2>2</option> 
<option value=3>3</option> 
<option value=4>4</option> 
<option value=5>5</option> 
... all the way to let's say 500 
</select> 

重新填充它是一件輕而易舉的事。我有一個json解析器,它創建了 ​​3210 字段。

我已經試過:

.remove() 
.children().remove() 
.empty() 

他們都有去除數以百計的選項具有相同的表現低迷。有什麼我失蹤?

+1

你如何決定刪除哪些元素?計算出你需要使用哪些元素來填充'select',而不是填充它,然後找出要刪除的元素。 – 2011-05-06 20:56:30

+0

我希望在字段項目之間刪除所有

+1

奇怪的是,我意識到這是一個最小的例子,頁面上沒有其他任何東西,但是一個'select'元素,包含2339個'option',可以或多或少地立即清空:[JS Fiddle](http:// jsfiddle。淨/ davidThomas/Mq9nd /)。你可以發佈一個鏈接到現場演示再現你的問題? – 2011-05-06 21:34:37

回答

1

你試過循環它們嗎?

$('#myDropDown option').each(function(i, option){ $(option).remove(); }); 

您可以通過跟蹤i的值來指定哪些值。

+0

是的,如果我想跟蹤他們選擇的東西,那麼它就可以工作。我不想要。 Bascially認爲它像一個國家/城市組合。如果我選擇加利福尼亞州,我會在第二次下降的時候讓所有加利福尼亞州的城市(可能有數百人)。現在,如果我改變加利福尼亞州說,阿拉斯加,我需要刪除所有加州的城市,並取代阿拉斯加的城市。 – Loony2nz 2011-05-06 21:01:38

0

有趣的問題。我認爲,如果你希望它是真快,你可以只顯示/隱藏選項

$("#someOption").hide(); 

編輯: 我想你可能有填充值的數組,讓我們說values。如果你首先遍歷你的選項,並且檢查每個選項是否在values陣列中(反之不然,會很慢),它會很快。所以有:

var values = [...]; //Array with values that must 'exist' in the dropdown 
$("#select1 option").each(function(i, option){ 
    option.style.display = ($.inArray(option.value, values) >= 0 ? 'block' : 'none'); 
}); 

請注意,我們正在避免循環內的jquery選擇器來提高性能。我們並沒有首先遍歷數組(和內部的選項),因爲在數組中搜索比在dom中搜索具有特定屬性(本例中爲值)的元素(在此情況下爲選項)要快得多。

希望這會有所幫助。歡呼

+0

是的,這並沒有幫助:( – Loony2nz 2011-05-06 21:02:43

0

問題可能是,jQuery嘗試清理時刪除的東西,請閱讀.empty()的詳細信息(從「避免內存泄漏...」)。

如果你認爲這是不是在你的情況有問題,那麼

$("#someOption").text("");

可能是你需要的大錘。

0
$("#myDropDown").find("option").remove();