Как я могу получить часть HTML, которая производит определенную строку после раздетого?
По сути, я хочу иметь возможность вызывать функцию для некоторой 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;
}
Спасибо!
1 ответ
Создайте treewalker и проверьте, какие узлы содержат строку поиска