Показать сообщение отдельно
  #23 (permalink)  
Старый 06.11.2017, 00:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

JAMLIGHT,
оно в любом случае не будет работать корректно даже если и записать это правильно.

Это можно назвать принципом поиска, но далеко не готовым кодом для этого и вот почему.

Найденное обрамляется тегом А с именем (тут уже почти неизбежны ошибки) и текстом равным поисковому запросу. Первое действие находит сочетания имени и старого запроса удаляя их, но при этом сам тег А со стилем подсветки остается. То есть подсветка предыдущего поиска останется на странице наряду с подсветкой нового поиска.

Таким образом если изначально в параграфах был текст, то с каждым запросом он засоряется html-тегами от предыдущего поиска. А что будет если найти нужно будет сочетания слов одно из которых при этом будет обрамлено таким тегом? А если в "боевых условиях", где содержимое параграфов не гарантия "чистого текста", а различные html теги? А может получится в итоге ужас на странице.

<html>
<head>
<meta charset="utf-8">
<body>

<p>какой-то текст с чем-то <a name="для" style="background:grey">для</a> поиска</p>
<p>какой-то текст с чем-то <a name="для" style="background:grey">для</a> поиска</p>

<script>
var pElements = document.getElementsByTagName("p"),
    lastResFind = "для",
    textToFind = "чем-то",
    last = new RegExp('name="'+lastResFind+'"', 'gi'),
    find = new RegExp(textToFind, 'gi');
  
for (var i = 0; i < pElements.length; i++) {
    pElements[i].innerHTML = pElements[i].innerHTML.replace(last, " ").replace(find, '<a name="'+textToFind+'" style="background:grey">'+textToFind+'</a>');
}

</script>
</body>
</html>

Последний раз редактировалось laimas, 06.11.2017 в 00:22.
Ответить с цитированием