修改代码以换行整个单词&使它不区分大小写

Modify code to wrap whole words & make it non case sensitive

本文关键字:不区 大小写 单词 代码 换行 修改      更新时间:2023-09-26
function filterSearchWords() {
    var query = $("#searchquery").val();
    go(query);
    function go(query) {
        $(".search-result p:contains(" + query + ")").html(function (_, html) {
            return html.replace(query, "<span class='search-enlight'>$&</span>", 'gi');
        });
        $(".search-result h2 a:contains(" + query + ")").html(function (_, html) {
            return html.replace(query, "<span class='search-enlight'>$&</span>", 'gi');
        });
        console.log(query);
    }
}

这是我的尝试。它添加了span,但只添加了包含字符串的单词或部分单词。假设字符串是Pie,它将span添加到所有的"Pie"中,并将"Pie"包裹在Piechart中,但我希望它包裹所有的Piechart和Pie,没有大写字母。

谁能修改我的代码来帮助我?

感谢

我尝试使用正则表达式"gi"似乎不工作:/

更新差不多了…

function filterSearchWords() {
    var query = $("#searchquery").val();
    go(query);
    function go(query) {
        $.extend($.expr[':'], {
            'containsi': function (elem, i, match, array) {
                return (elem.textContent || elem.innerText || '').toLowerCase()
                .indexOf((match[3] || "").toLowerCase()) >= 0;
            }
        });
        $(".search-result p:containsi(" + query + ")").html(function (_, html) {
            return html.replace(new RegExp(query,  "gi"), "<span class='search-enlight'>$&</span>");
        });
        $(".search-result h2 a:containsi(" + query + ")").html(function (_, html) {
            return html.replace(new RegExp(query, "gi"), "<span class='search-enlight'>$&</span>");
        });
        console.log(query);
    }
}
这是我的最后一个问题。我已经成功地删除了区分大小写的部分,但是它不匹配整个单词。

关于MDN中第三个flags参数的说明:

注意:flags参数在v8 Core (Chrome和Node.js)中不起作用

你应该使用一个RegExp对象来代替:

return html.replace(new RegExp(query, "gi"), "<span class='search-enlight'>$&</span>");