2011-08-08 21 views
1

1日例如我有以下行的表:的jQuery包含:獲得

  • 蘋果
  • 鹽水
  • 圍裙
  • 廚師
  • 扼流圈

我已創建一個定時器的解決方案,用戶可以開始輸入部分單詞,我想是能夠凸顯數據的列。

我能夠做得到一些信息如下:

console.log($('#' + ListBoxVal + ' tr:contains("' + filterString + '")')); 

但是,當我輸入字母「C」,例如我得到如下結果:

  • 汽車
  • 嗆012
  • 廚師

真的,我想要的是改變在第一個以'c'開頭的單詞的css。我看着選擇器(即〜=),但看起來並不奏效。從列表中的第一個字母完成過濾器匹配的最佳方法是什麼?

UPDATE:

所有的建議都是很接近,但我的例子是有點過。我更新了上面的列表以更準確。在上面的列表中,如果我的過濾器是字母「c」,下面的所有解決方案仍然帶回「桃子」。

對不起。

更新#2

ShankarSangoli的解決方案是在正確的道路上,但我仍然有例如問題,如果我的角色「CE」我就得到一個比賽方式:

缺席而非證書

是什麼,以確保我搜索單詞而不是整個字開頭的最佳方式?

+0

您是否在尋找匹配的第一個元素,或者其第一個字母與您的過濾器字符串匹配的元素,還是第一個這樣的元素? – BoltClock

+0

我正在尋找第一個字母匹配的元素的第一個 – webdad3

回答

2

試試這個:

//To select only the rows that start with filterstring 
    var filteredList = $('#' + ListBoxVal + ' tr:contains("' + filterString + '")').filter(function(i){ 

     return $(this).text().indexOf(filterString) == 0; 

    }) 

    //To set the css for first element in the filteredList 
    filteredList.eq(0).css({ fontWeight: "bold" }); 
+0

請參閱我更新的問題。 – webdad3

+0

@Jeff - 看看我編輯的答案,希望對你有所幫助。 – ShankarSangoli

+0

這非常好。我知道我沒有在我的問題中提及這一點,但如果我需要組合字符,它將如何改變?如果輸入'ch',該怎麼辦?在我的名單中,我想強調'窒息'。用你的例子你會怎麼做? – webdad3

1

$(...anything...).eq(0)會給你第一個結果。

+0

請查看我更新的問題。 – webdad3

3

,匹配以子串開頭的文本,你需要實現一個新的選擇:

$.expr[':'].startsWith = function(obj, index, meta, stack){ 
  return ($(obj).text().indexOf(meta[3]) == 0); 
}; 

您還需要追加first selector

$('#' + ListBoxVal + ' tr:startsWith("' + filterString + '"):first'); 
+0

請參閱我更新的問題。 – webdad3