2013-11-27 42 views
2

我想通過使用jquery建立一個字符串搜索。我的頁面包含包含文本的段落標籤的數量。我的代碼如下:jquery .html()替換大小寫敏感

$("#search_button").click(function(event){ 
var keyword = $("#searchkeyword").val(); 
var paras = $("p:contains('" + keyword + "')").each(function(){ 
$(this).html(
$(this).html().replace(keyword ,'<span style=color:red> "' + keyword + '" </span>') 
); 
}); 
$('#search_results').html(paras); 
event.preventDefault(); 
}); 

搜索工作正常。我遇到了html.replace()問題,它只替換了確切的大小寫匹配單詞。假設我搜索單詞「apple」,html.replace()只會在文本中包含單詞「apple」時替換字符串,但如果搜索「Apple」,搜索仍然有效,但在這種情況下,html.replace )不起作用,因爲字符串包含單詞「apple」而不是「Apple」。我如何刪除我的代碼中的html.repalce區分大小寫?

+0

如果你想不區分大小寫的匹配,你必須使用帶有'i'修飾符的正則表達式。字符串替換始終區分大小寫。 – Barmar

+0

另請注意,jQuery的':contains()'僞選擇器區分大小寫。 (), – Barmar

+0

我已覆蓋:包含選擇器由以下代碼:jQuery.expr [':']。contains = function(a,i,m){返回jQuery(a).text()。toUpperCase() .indexOf (m [3] .toUpperCase())> = 0; }; – imran

回答

9

這就是簡單的正則表達式,試圖改變這一行:

$(this).html().replace(keyword ,'<span style=color:red> "' + keyword + '" </span>') 

這一個:

$(this).html().replace(new RegExp(keyword, "ig") ,'<span style=color:red> "' + keyword + '" </span>') 

在RegExp中,「i」參數將執行該操作,如果在$(this).html()生成的字符串中發現多個關鍵字的重合,則「g」將再次重複該替換操作()

+0

感謝@kabomi完美的工作 – imran

+0

你很好:-) – kabomi

+3

不幸的是,如果單詞是大寫,搜索詞是小寫字母時,搜索詞將用小寫搜索詞替換大寫事件。 – frazras

1
$("#search_button").on('click', function(e){ 
    e.preventDefault(); 

    var keyword = $("#searchkeyword").val().toLowerCase(), 
     paras = $('p').filter(function() { 
        return $(this).text().toLowerCase().indexOf(keyword) != -1; 
     }).html(function(_, html) { 
      var reg = new RegExp('(' + keyword + ')', 'gi'); 
      return html.replace(reg, "<span class='red'>$1</span>"); 
     }); 

    $('#search_results').html(paras); 
}); 

FIDDLE

注意,你移動(不是複製)的段落到#search_result元素,並在下次搜索覆蓋他們,他們也不會神奇迴歸,他們走了!

0

也許你想要的是一個替換使用大小寫不敏感的,像這樣:

msg = 'This is a Case Sensitive message'; 
msg.replace(/case/gi, "case"); 
"This is a case Sensitive message" 

這裏更多:http://www.w3schools.com/jsref/jsref_replace.asp

0

您可以使用正則表達式。不過,我並不擅長構建regExps。檢查this出來,這可能會有所幫助。

通過的方式,方法「replace」是原生的JavaScript,而不是jQuery的

1

老問題,但一個更好的答案是:

$(this).html().replace(new RegExp('('+keyword+')', 'ig') ,'<span style="color:red"> $1 </span>') 

目前頂級的答案將改變大寫字母小寫。新Regexp()中的額外括號將存儲找到的值。 .replace()中的$ 1插入存儲的值,以便字符大小寫保持一致。