Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 05.11.2017, 19:25
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

А это нечто иное?
Ответить с цитированием
  #22 (permalink)  
Старый 05.11.2017, 20:55
Аватар для JAMLIGHT
Аспирант
Отправить личное сообщение для JAMLIGHT Посмотреть профиль Найти все сообщения от JAMLIGHT
 
Регистрация: 23.01.2017
Сообщений: 80

так тоже не работает
var pElements = document.getElementsByTagName("p");
 
for (var i = 0; i < pElements.length; i++) {
    pElements[i].innerHTML = pElements[i].innerHTML.replace(eval("/name="+lastResFind+"/gi")," ");//стираем предыдущие якори для скрола;
    pElements[i].innerHTML = pElements[i].innerHTML.replace(eval("/"+textToFind+"/gi"),"<a name="+textToFind+" style='background:grey'>"+textToFind+"</a>"); //Заменяем найденный текст ссылками с якорем;
Ответить с цитированием
  #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.
Ответить с цитированием
  #24 (permalink)  
Старый 06.11.2017, 06:30
Аватар для JAMLIGHT
Аспирант
Отправить личное сообщение для JAMLIGHT Посмотреть профиль Найти все сообщения от JAMLIGHT
 
Регистрация: 23.01.2017
Сообщений: 80

Ну мне бы под свои нужды хотя бы. У меня в тегах p чистый текст будет.Тоесть скрипт очищает только текст якоря , а теги якоря остаются?А что делает данный код
pElements[i].innerHTML = pElements[i].innerHTML.replace(eval("/name="+lastResFind+"/gi")," ");//стираем предыдущие якори для скрола;
?Ну это если только до перезагрузки страницы .Ясно, что можно придумать?

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

Сообщение от JAMLIGHT
что можно придумать?
Удалять нужно теги подсветки прежнего поиска:

<html>
<head>
<meta charset="utf-8">
<style>
.higlight {
    background-color: #8FDB83;
}
</style>
</head>
<body>

<p>какой-то текст с чем-то <a class="higlight">для</a> поиска</p>
<p>какой-то текст с чем-то <a class="higlight">для</a> поиска</p>

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

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


Атрибут name тегу не добавлять, а только класс, которому в CSS определять цвет подсветки.
Ответить с цитированием
  #26 (permalink)  
Старый 06.11.2017, 08:17
Аватар для JAMLIGHT
Аспирант
Отправить личное сообщение для JAMLIGHT Посмотреть профиль Найти все сообщения от JAMLIGHT
 
Регистрация: 23.01.2017
Сообщений: 80

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

Ну добавляйте, только каждое имя должно быть уникально.
Ответить с цитированием
  #28 (permalink)  
Старый 06.11.2017, 08:20
Аватар для JAMLIGHT
Аспирант
Отправить личное сообщение для JAMLIGHT Посмотреть профиль Найти все сообщения от JAMLIGHT
 
Регистрация: 23.01.2017
Сообщений: 80

соберите код воедино.Я не пишу на яваскрипте и синтаксиса не знаю.Задача модифицировать скрипт,Подсказки мне что русскому на китайском

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

Сообщение от JAMLIGHT
хотябы некорректно бы работало
Пример, что я показал работает? Выбрасывайте eval(...), заменяя на RegExp как показано. Определяйте при вставке и имена, но учтите, если в имя вставляется текст поиска, то значение тега нужно обрамлять кавычками как показано, иначе при поиске сочетаний будут проблемы.

Все. Далее можете в сети более глубоко углубиться в тему, например тут:

https://habrahabr.ru/sandbox/101260/
https://habrahabr.ru/post/257025/

Под jQuery есть готовый плагин http://johannburkard.de/blog/program...ry-plugin.html
Ответить с цитированием
  #30 (permalink)  
Старый 06.11.2017, 08:42
Аватар для JAMLIGHT
Аспирант
Отправить личное сообщение для JAMLIGHT Посмотреть профиль Найти все сообщения от JAMLIGHT
 
Регистрация: 23.01.2017
Сообщений: 80

обрывок кода подсветки работает,но надо его прикрутить ещё к общей обьектой модели кода модуля поиска
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать Ява скрипт Kavan Events/DOM/Window 2 20.05.2017 08:25
Куплю скрипт nbspwka Работа 2 06.02.2017 09:40
Модифицировать скрипт для работы с несколькими формами на одной странице javascript_pupil Общие вопросы Javascript 8 30.01.2017 12:53
как скопировать скрипт с переадресующей страници ramisa Элементы интерфейса 9 09.07.2013 23:59
добавление окошка в скрипт подсчета слов Гость Общие вопросы Javascript 10 11.03.2008 17:07