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