Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery html()替换区分大小写_Jquery_Html_String_Replace - Fatal编程技术网

Jquery html()替换区分大小写

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

我正在尝试使用Jquery构建字符串搜索。我的页面包含许多包含文本的段落标记。我的代码如下:

$("#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的新手幸运的是,如果单词大写,搜索词小写,搜索词将用小写搜索词替换大写的匹配项。