Как я могу получить часть HTML, которая производит определенную строку после раздетого?

По сути, я хочу иметь возможность вызывать функцию для некоторой html-строки и получать обратно массив начальных и конечных индексов вхождений. Это будет выглядеть так в консоли:

var html = "<b>Hello</b>&nbsp;<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 и проверьте, какие узлы содержат строку поиска

Другие вопросы по тегам