3

我目前有一个脚本,可以在页面上搜索用户键入的单词并在找到该单词时突出显示该单词。

但是,当用户在他们正在搜索的字符串中放置一个空格时,这会失败,因为我使用 jQuery 将文档文本拆分为节点,并检查每个节点是否包含当前搜索短语。

我想要做的是扩展它以搜索用户定义的字符串,而不是在第一个空格之后失败。不过,我根本不知道该怎么做,所以我希望有人能在这里帮助我。

这是我目前正在使用的查找节点的方法:

keyup(function({

    $(instance.textWrapper).html(instance.getOriginalText());               

    if (this.value.length >= instance.startSearchingLength) {

        var regx = new RegExp("(" + escape(this.value) + ")", 'gi');

        $(instance.textWrapper).each(function() {
            var textNodes = $(this).find('*').contents().filter(function(){
                return this.nodeType === 3
        });

        textNodes.each(function(){
            var $this = $(this);
            var content = $this.text();
            content = content.replace(regx, 
                                      '<span class="'
                                      + instance.highlightCssClass +
                                      '">$1</span>');
            $this.replaceWith(content);     
        });
    });
}

startSearchingLength之前定义为搜索必须被搜索的长度。 highlightCssClass正是 CSS 类在找到字符串后将其包装起来的内容。

失败示例:

搜索foo bar将突出显示页面上的每个实例foo,但是一旦遇到空格,这些突出显示就会消失,并且无法找到完整的字符串。

因此,代码当前搜索每个人Text Node的搜索查询,但我希望让脚本在文件的所有文本中找到任何字符串。我不知道如何做到这一点,所以任何帮助将不胜感激!

谢谢!

4

1 回答 1

1

简单的。您使用了错误的转义。放下那个escape

this.value.replace(/([[\\^$.|?*+()])/g, "\\$1")

您必须转义的是正则表达式的保留字符。

于 2012-08-07T19:47:14.963 回答