我目前有一个脚本可以在页面中搜索用户输入的单词,如果找到则会突出显示该单词。
然而,当用户在他们正在搜索的字符串中放置空格时,这会失败,因为我正在使用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
个搜索查询,但我希望脚本能够在文件的所有文本中找到任何字符串。我不知道该怎么做,所以任何帮助都会非常感激!
谢谢!
答案 0 :(得分:1)
简单。您正在使用错误的转义。删除escape
。
this.value.replace(/([[\\^$.|?*+()])/g, "\\$1")
你要逃脱的是正则表达式的保留字符。