2013-11-27 43 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插入存储的值,以便字符大小写保持一致。