這似乎工作的一種方法如下,雖然它欺騙,一定程度上,通過分配是隱藏的,並且顯示的選項,變量,然後使用這些變量的.length
屬性:
$('#txtListSearch').keyup(
function(e) {
var val = $(this).val().toLowerCase(),
sel = $('#selContactLists');
if (val.length < 1) {
sel.find('option').show();
}
else {
var shown = sel.find('option').filter(
function() {
return $(this).text().toLowerCase().indexOf(val) !== -1;
}).show().first().prop('selected',true),
hidden = sel.find('option').filter(
function() {
return $(this).text().toLowerCase().indexOf(val) == -1;
}).hide();
console.log(shown.length, hidden.length);
}
});
JS Fiddle demo。
請注意,以上是對原始代碼進行比較大的重寫。我已經使用了一些選擇器緩存來減少DOM方法在keyup
方法中的訪問次數,並且由於方法.toLowerCase()
這是一個不區分大小寫的搜索,並且也將selectedIndex
轉換爲第一個非隱藏選項(在Chromium中,這似乎是爲了使one
在select
中顯示,同時鍵入t
時隱藏)所必需的。
你還可以發佈一個HTML例子嗎? – Stefan 2012-08-14 14:43:21
關於'size()'的注意事項會導致你提及它。它被標記爲depraated。從文檔:The .size()方法在功能上等同於.length屬性;然而,.length屬性是首選,因爲它沒有函數調用的開銷。「(http://api.jquery.com/size/) – Nope 2012-08-14 14:45:55
這些選項在什麼基礎上隱藏或顯示? – 2012-08-14 15:33:44