Jquery html()替换区分大小写
我正在尝试使用Jquery构建字符串搜索。我的页面包含许多包含文本的段落标记。我的代码如下:Jquery html()替换区分大小写,jquery,html,string,replace,Jquery,Html,String,Replace,我正在尝试使用Jquery构建字符串搜索。我的页面包含许多包含文本的段落标记。我的代码如下: $("#search_button").click(function(event){ var keyword = $("#searchkeyword").val(); var paras = $("p:contains('" + keyword + "')").each(function(){ $(this).html( $(this).html().replace( keyword ,'<spa
$("#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();
});
$(“#搜索按钮”)。单击(功能(事件){
var关键字=$(“#搜索关键字”).val();
var-paras=$(“p:contains(“+”关键字+“)”)))。每个(函数(){
$(this.html)(
$(this.html().replace(关键字“+”关键字+”)
);
});
$('search#u results').html(第2-3段);
event.preventDefault();
});
搜索工作正常。我对html.replace()有问题,它只替换与大小写完全匹配的单词。假设我搜索单词“apple”,html.replace()只会在文本包含单词“apple”时替换字符串,但如果我搜索“apple”,搜索仍然有效,但在这种情况下,html.replace()不起作用,因为字符串包含单词“apple”而不是“apple”。如何删除代码中html.repalce的区分大小写功能?$(“#搜索按钮”)。在('click',函数(e)上{
$("#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);
});
e、 预防默认值();
var关键字=$(“#searchkeyword”).val().toLowerCase(),
段落=$('p')。过滤器(函数(){
返回$(this).text().toLowerCase().indexOf(关键字)!=-1;
}).html(函数(\ux,html){
var reg=new RegExp(“(“+关键字+”)”,“gi”);
返回html.replace(reg,“$1”);
});
$('search#u results').html(第2-3段);
});
请注意,您正在将段落移动(而不是复制)到
#search_result
元素中,在下一次搜索时覆盖它们,它们不会神奇地返回,它们消失了 您可能需要使用不区分大小写的替换,如下所示:
msg = 'This is a Case Sensitive message';
msg.replace(/case/gi, "case");
"This is a case Sensitive message"
更多信息:使用正则表达式很容易,请尝试更改此行:
$(this).html().replace( keyword ,'<span style=color:red> "' + keyword + '" </span>')
$(this.html().replace(关键字“,”+关键字+”)
对于这一个:
$(this).html().replace( new RegExp(keyword, "ig") ,'<span style=color:red> "' + keyword + '" </span>')
$(this.html().replace(新的RegExp(关键字,“ig”),“+”关键字+“)
在RegExp中,如果在$(this.html())生成的字符串中发现关键字有多个重合,则“i”参数将执行此操作,“g”将再次重复替换。您可以使用正则表达式。不过,我不擅长构造正则表达式。看看,可能会有帮助
顺便说一下,方法“”是javascript固有的,不是jquery的老问题,但更好的答案是:
$(this).html().replace( new RegExp('('+keyword+')', 'ig') ,'<span style="color:red"> $1 </span>' )
$(this.html().replace(新的RegExp(“(“+关键字+”)”,“ig”),“$1”)
当前的顶部答案将大写字母改为小写。new Regexp()中的额外括号将存储找到的值。$1 in.replace()插入存储值,使字符大小写保持一致。如果要进行不区分大小写的匹配,必须使用带有
i
修饰符的正则表达式。字符串替换始终区分大小写。还要注意,jQuery的:contains()
伪选择器区分大小写。我已用以下代码覆盖了:contains选择器:jQuery.expr[':']。contains=函数(a,i,m){返回jQuery(a.text().toUpperCase().indexOf(m[3]。toUpperCase())>=0;};好的,不过最好添加一个新的伪选择器:icontains
,而不是覆盖普通选择器。无论如何,我的第一条注释仍然适用,请使用正则表达式替换不区分大小写的字符串。@Barmar您能给我举个例子或修改我的regexp代码吗,因为我是jQueryUn的新手幸运的是,如果单词大写,搜索词小写,搜索词将用小写搜索词替换大写的匹配项。