Maksym
html: 2018-11-01
Maksym
искомое значение: 0
Deleted
html: 2018-11-01
окей, если у тебя HTML без тегов значит верхняя нода это Text
Deleted
Это значит у нее нет innerHTML
Maksym
а мой вариант подошел?
да, почти все хорошо, но есть косячность как-то криво определяет положение искомого значения в тексте
Anonymous
Deleted
html: 2018-11-01
поэтому надо получать innerHTML не от дочернего узла как тут
dom.body.childNodes[0].innerHTML
а у body
dom.body.innerHTML
Deleted
body отдает innerHTML?
Maksym
Deleted
у меня там в функции findOverlap небольшая неточность из-за которой выделение при поиске захватывает лишний символ
Deleted
и еще подсчет переменной segmentLength нужно оптимизировать, сейчас это занимает лишнее время
Maksym
Deleted
минуту, надо подумать
Deleted
все, понял, в другом месте ошибку сделал
Deleted
const before = text.substring(0, start)
const segment = text.substring(start, end)
const after = text.substring(end)
Deleted
Найди подобный кусок кода и замени на этот
Deleted
Там прибавление единицы к конечному индексу было лишнее
Maksym
понял
Maksym
еще есть косяк не пойму как поправить, если регурярка не содержит флаг g то все висит
Maksym
Это кстати общая проблема на обоих решениях
Deleted
Deleted
или это пользователь может пожелать?
Maksym
Потому что, если пользователь ввел регулярку без этого флага, то его и не должно быть.
Anonymous
Maksym
Причем есть еще одна общая проблема в этом же месте кода
while ((temp = regexp.exec(text)) != null) {
Выделяются не все найденные соответствия
Deleted
Deleted
Maksym
https://jsfiddle.net/stomaks/jgexwfma/527/
Deleted
Maksym
Странно то, что в песочнице норм работает.
А у меня в рабочем коде нет (
Deleted
Deleted
?
Maksym
да
Deleted
да
ошибка стабильная?
я имею ввиду она всегда выдает посвечивает одинаковое неправильное количество совпадений?
Maksym
Maksym
Кстати да
Deleted
Подсвечивается только последний символ
Deleted
хм стоп
Maksym
Видимо да
Maksym
Хотя вон есть строки где 0 вообще не подсвечен
Deleted
reg.lastIndex = 0;
Deleted
надо сбрасывать курсор регулярки
Deleted
Maksym
Хм, логично
Maksym
Оооо, красота!!
Maksym
Maksym
Красота, оба примера работают хорошо.
Супер, спасибо вам огромное друзья, за уделенное время!
Maksym
По скорости работы примерно одинаково отрабатывают оба примера
Maksym
Второй немного дольше, около секунды при прочих равных
Deleted
Deleted
segmentLength оптимизируй
Maksym
Поиск без выделения 1,5 секунды с выделением ~6
Maksym
Ой там что-то загадочное для меня написано, ладно уже завтра буду тщательней смотреть.
Deleted
Maksym
const replacement = document.createElement(`span`);
replacement.innerHTML = text;
От этих строк можно избавиться ?
Maksym
совать прямо в body ?
Deleted
node.parentNode.replaceChild(replacement, node)
Maksym
Ну там сейчас создается верхний span
Maksym
я так понимаю от него можно избавиться
Maksym
понял
Deleted
У тебя есть текстовая нода которую надо заменить на комбинацию текстовых нод и спанов
Deleted
Можно пройтись по DOM’у в этом участке и вставить их отдельно
Deleted
хотя хм
Deleted
сек
Deleted
я забыл про такую прекрасную штуку как фрагменты
Deleted
может сработает
Maksym
Я зачем спросил, может удастся ускорить код, избавившись от создания лишних dom елементов
Deleted
Deleted
потому что тогда надо будет отдельно парсить тот фрагмент
Deleted
и циклом перебирать
Deleted
Быстрее код могла бы сделать другая штука
Deleted
мм
Maksym
Понял, ну вариант с парсингом, наверное правильней чем искать регуляркой теги. Но отрабатывает он на 2-3 секунды дольше.
Deleted
надо заранее разобрать новый HTML фрагмент на куски строк без выделения и с выделением
Deleted
тогда можно исбежать лишнего парсинга HTML
Maksym
Не совсем понял
Deleted
сейчас