2011-08-12 32 views
4

文字,我得到這個代碼: LinkjQuery的突出被發現charachters:包含一個輸入框

我可以突出顯示靜態文本的字符通過這個js:

$("li:contains('Content1')").each(function(){ 
    var content = "Content1"; 
    this.innerHTML = this.innerHTML.replace(content,"<span>"+content+"</span>") 
}) 

Content1由動態值:$("#main").val()

問題:我如何能凸顯發現:contains並與來自輸入值的話箱

+1

我很想知道如何讓'$( 「李:包含( '內容1')」)。selector'從'.each'功能 –

回答

3

這將是一個有點冒險,但check this out

你的問題是,當你調整的內容,你會不再能夠檢查原始內容是什麼。最好的解決方法是,在開始時,將原始的LI文本存儲在數據屬性中,然後將其用於後面的操作。

$("li").each(function() { 
    $(this).attr('data-original', $(this).text()); 
    $(this).attr('data-original-l', $(this).text().toLowerCase()); 
}); 

然後,我們需要調整您的選擇,以檢查此屬性(而不是文本值):

$("li[data-original *= \"" + $("#main").val().toLowerCase() + "\"]") 

其中,例如將搜索li [data-original * =「Harry Potter」],它是「任何含有屬性」data-original「的LI,其中包含」Harry Potter「(see here

從那裏開始,我們只需要調整用於更換的聲明如下:

$(this).html($(this).data('original').replace(new RegExp(content, "i"), "<span class='highlight'>$&</span>")); 

我們正在做的,你本來有同樣的事情,但現在使用$(本)。數據(「原始」)值,而不是$(本).VAL()。我們還使用正則表達式,使我們可以做更換不區分大小寫的。此外,我們還與$&其中包含從原始字符串的正則表達式測試賽取代。

簡單如餡餅!希望這對你有用,讓我知道你是否遇到任何困難。

+0

好:)內。使用attr:d – kritya

+0

我認爲使用'keyup'和'removeClass(「亮點」)'效果更好http://jsfiddle.net/NbBsn/22/ – Sotiris

+0

@ghayes但有一兩件事,這是區分大小寫的,但我需要區分大小寫因爲你改變包含一個我不能綁定:包含不區分大小寫的。我怎麼能在這裏做casensnsite搜索? – kritya