基本上,我希望能够在一些html字符串上调用一个函数,然后返回一些事件的起始和结束索引。它在控制台中看起来像这样:
var html = "<b>Hello</b> <mark>World</mark>";
> getIndices(html, "Hello\u00A0World");
< [[3, 29]]
这样做的最终目的是能够使用一些字符串来包装html,并在文档中搜索字符串,就像大多数浏览器的ctrl + f功能一样。
我在下面编写了代码片段但其性能非常糟糕,特别是在长网页上调用整个机身的内部html时。这个代码绝对可以通过二进制搜索进行优化,而不是暴力破解和做其他一些不同的事情,但我在实现它时遇到了麻烦。对此的想法?
function getIndices(html, searchTerm){
var i = 0,
indices = [];
while(html.slice(i).replace(/<[^>]*>/g, '').indexOf(searchTerm) !== -1){
i = html.indexOf(searchTerm[0], i);
if(html.slice(i).replace(/<[^>]*>/g, '').indexOf(searchTerm) === 0){
indices.push(i);
}
i++;
}
return indices;
}
谢谢!
答案 0 :(得分:1)
创建一个树木行者并检查哪些节点包含搜索字符串