Можно ли сделать ссылку, которая ищет текст

1 23
S
На сайте с 30.09.2016
Offline
469
#21

Вообще-то, я согласен с мнением товарищей, высказавшихся выше в пользу обработки страницы PHP-скриптом. Это и абсолютно кроссбраузерно, и даёт гораздо больше гибкости в обработке. Но так, для интереса - вот код на чистом JS, без Jquery (а то народ, походу, чистый JS вообще начал забывать :)). Работает даже в старом ИЭ и обеспечивает регистронезависимый поиск со скроллом на искомую строку (функцию позиционирования взял из инета).

Ссылка на страницу вида

<a href="/images/doc/31012017.html?s=архангельск">Санаторий</a>
В конце страницы ссылка на скрипт
var search = decodeURI(window.location.search.substring(3));

var doc = document.body.innerHTML;
var pat = new RegExp(search+'(?=[^<>]*<)', 'ig');
var repl1 = doc.match(pat);

doc = doc.replace(pat, '<span class="found" style="background-color: #ccc">$&</span>');
document.body.innerHTML = doc.replace('class="found"', 'id="found1" class="found"');
var found1 = document.getElementById('found1');
if(found1){
var x = getOffsetRect(found1).left;
var y = getOffsetRect(found1).top;
window.scroll(x,y);
}
function getOffsetRect(elem) {
var box = elem.getBoundingClientRect()
var body = document.body
var docElem = document.documentElement
var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop
var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft
var clientTop = docElem.clientTop || body.clientTop || 0
var clientLeft = docElem.clientLeft || body.clientLeft || 0
var top = box.top + scrollTop - clientTop
var left = box.left + scrollLeft - clientLeft
return { top: Math.round(top), left: Math.round(left) }
}
Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
D
На сайте с 31.01.2017
Offline
15
#22
Sitealert:
Вообще-то, я согласен с мнением товарищей, высказавшихся выше в пользу обработки страницы PHP-скриптом. Это и абсолютно кроссбраузерно, и даёт гораздо больше гибкости в обработке. Но так, для интереса - вот код на чистом JS, без Jquery (а то народ, походу, чистый JS вообще начал забывать :)). Работает даже в старом ИЭ и обеспечивает регистронезависимый поиск со скроллом на искомую строку (функцию позиционирования взял из инета).
Ссылка на страницу вида
<a href="/images/doc/31012017.html?s=архангельск">Санаторий</a>
В конце страницы ссылка на скрипт
var search = decodeURI(window.location.search.substring(3));

var doc = document.body.innerHTML;
var pat = new RegExp(search+'(?=[^<>]*<)', 'ig');
var repl1 = doc.match(pat);

doc = doc.replace(pat, '<span class="found" style="background-color: #ccc">$&</span>');
document.body.innerHTML = doc.replace('class="found"', 'id="found1" class="found"');
var found1 = document.getElementById('found1');
if(found1){
var x = getOffsetRect(found1).left;
var y = getOffsetRect(found1).top;
window.scroll(x,y);
}
function getOffsetRect(elem) {
var box = elem.getBoundingClientRect()
var body = document.body
var docElem = document.documentElement
var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop
var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft
var clientTop = docElem.clientTop || body.clientTop || 0
var clientLeft = docElem.clientLeft || body.clientLeft || 0
var top = box.top + scrollTop - clientTop
var left = box.left + scrollLeft - clientLeft
return { top: Math.round(top), left: Math.round(left) }
}

Вы хоть понимаете что:

  • переписываете целиком innerHTML всего документа?
  • регулярка не универсальна и может сделать html код невалидным
  • у ТС явно голый HTML, предлагаете php ставить? А почему не nodjs, python, java и т.д.? Давайте еще CMS навесим, да сервер помощнее... Ради поиска строки то.

Не стоит журить за jquery, я его вообще в разработке не использую. Подключил только ради того, чтобы такой портянки не было.

S
На сайте с 30.09.2016
Offline
469
#23

Я то понимаю. А вот Вы, похоже свято верите, что короткая формула обеспечивает быстроту выполнения :). И думаете, что у Вас всё универсально :). Кстати, и портянка Ваша ненамного короче. И ни к чему было мой код в цитату выводить. Экономить надо форумное место, цитировать только существенное.

D
На сайте с 31.01.2017
Offline
15
#24

Sitealert, Раз понимаете, зачем приводите код который заведомо перезагрузит все ресурсы на странице + содержит трудно диагностируемую ошибку?

Я верю в многолетний опыт, там где можно копнуть пару раз лопатой, не стоит гнать бульдозер.

Про универсальность я и не писал, читайте внимательнее - самый простой вариант.

Давайте на чистоту, ваша портянка технически неверна - моя не кроссбраузерна. Но обе под ТЗ подходят (находят слово). А что выбрать, дело за ТС.

Sitealert:
И ни к чему было мой код в цитату выводить. Экономить надо форумное место, цитировать только существенное.

Это тоже из жизненного опыта, спорщики любят затирать свои сообщения. Не поймите привратно, просто страховка. Я конечно ваше замечание учту и еще раз перечитаю правила форума/раздела.

Y
На сайте с 25.10.2007
Offline
198
#25

Спасибо огромное, всем кто потратил время на прочтение, даже чуть не подрался ))) Во вторник на работет буду пробывать оба варианта, честно говоря не знал, что всё нак сложно, Думал, что решение будет однострочным... Я немного понимаю html, но в php почти ноль, поэтому пока прочел всё вышеизложенное- уже голова начала лопаться, но я такое люблю..

Еще раз огромное всем спасибо.

1 23

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий