Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > JavaScript: для новичков > Поиск по сайту без ключевых слов |
Автор: UmmiLab 19.9.2010, 19:31 |
Здравствуйте! Помогите пожалуйста. Нужен скрипт поиска по сайту без ключевых слов и без помощи поисковых систем. |
Автор: magelan 20.9.2010, 00:22 |
попытка юмора? сейчас вы еще добавите, без БД и точно станет понятно, что поиск не нужен. советую гуглить на предмет устройства поисковых машин. поиск написанный на коленке, ничего не ищет... только делает вид. |
Автор: Alexeis 20.9.2010, 09:03 | ||
magelan, как я понял речь о простом скрипте (лабораторная работа). Типа обойти div / p теги DOM и по совпадению выдать урл. Используется библиотека jQuery . В примерах к ней используется массив Address (возможно это результат работы Гугла), так что сами странички искать не нужно, задача поиска внутри страницы.
P.S. тема создана по моему совету. К сожалению с javascript, а также jQuery не знаком. |
Автор: Alexeis 20.9.2010, 11:34 | ||||||
Все еще проще, если слово присутствует на странице, то нужно добавить ссылку в список найденных (document.write). Ничего подсвечивать не нужно. В примере поиск осуществлялся таким образом
Где Item содержимое едита. contains - это какой-то скрипт из jQuery для сравнения. В данном случае он сравнивает с ключевым словом. В описании библиотеки сказано, что contains умеет не только сравнивать текст, но и искать по тегам, в том числе и по вложенным. По идее нужно сделать что-то типа contains(Item, document.<root>) . <root> - имею ввиду доступ к корневому тегу <html> Ради разнообразия приведу полный код поиска по ключевым словам. По идее с минимальными переделками его можно переделать в поиск по тексту используя contains(Item, document.<root>) . Собственно не зная синтаксиса и особенностей языка правильно сделать это трудно. У меня даже проверить результат не выходит ![]()
![]() |
Автор: bars80080 20.9.2010, 14:04 |
да. большинство кода javascript идёт вместе с html. тогда гораздо полезнее подстветка по-умолчанию - хтмл. твой код, кстати, из этого же плана. вот только почему ты насильно включил javascript - не понятно. подсветка html нормально обработает и javascript |
Автор: ksnk 20.9.2010, 15:16 | ||||
B]Alexeis[/B],
задача, когда возможно всего два варианта - "на этой страничке слово нашлось" и "ничего не нашли" - тривиальна и неинтересна, можно обойтись одним alert'ом. Без ajax? То есть, предлагается разместить такой сервис на всех страничках сайта, методично, вручную, посредством заказчика ;) пробежатся по ним и прокликать на кнопку "поиск" на всех страничках? В результате, на отдельной вкладке, которая должна появится после первого клика будет скапливаться информация о найденных страничках? Document.write тут не самый подходящий инструмент. Возникнут довольно забавные сложности с общением между вкладками. Их можно реализовать на куках. одно окно будет искать и вываливать информацию в куку, из которой окно с результатами будет выковыривать информацию по таймауту. после чего ее опустошать. В качестве прикола или трудотерапии такую задачу еще можно себе представить, но в качестве лабораторной - уже нет... Imho ajax все-таки - более человеколюбивое решение ![]() Хотя, web-паучек для сайта на javascript - довольно забавное и, вероятно, полезное в чем-то, существо. Может его кто-нибудь уже делал? надо б поискать... Если сайт маленький и не страшно его подосить таким образом - почему бы и не прикрутить? Собственно, поиск в одной страничке достаточно тривиален. Что-нибудь вроде:
Хотя насчет того, что весь body во всех броузерах с удовольствием отдаст весь свой текстовый контент со всеми вложенными дивами с учетом скрытых элементов, я почему-то сомневаюсь... Если нужно искать фразу - нужно аккуратно прослешить фразу так. чтобы ее можно было безопасно вставить в регулярку, заменив служебные символы на прослешенные и пробелы на \s+ и сделать вместо indexof match с получившейся регуляркой... Если фраза - просто набор слов - вместо пробелов поставить |... |
Автор: Alexeis 20.9.2010, 16:23 | ||
Хм... действительно, ведь контент нужно подгружать с других веб страниц. Т.е. чтобы выполнить условие задачи нужно сначала создать невидимый тег типа meta, затем в него загрузить страницу, дождаться загрузки, сделать поиск, удалить содержимое, загрузить контент следующей страницы и т.д. В принципе реализуемо, но мне кажется что для лабораторной сложновато. |
Автор: Alexeis 21.9.2010, 22:12 | ||
Таки добил решение, правда набор страниц сайта пришлось забить массивом. Подгрузку страниц сделал при помощи скрипта $.get (AJAX), который по окончанию загрузки передает в калбэк функцию html текст страницы, калбэк функция берет следующую ссылку и рекурсивно вызывает себя до тех пор пока не переберет весь список до конца. Получилось очень даже просто.
|
Автор: ksnk 21.9.2010, 23:47 | ||
Ну, для человека не знакомого с jQuery и javascript - очень даже хорошо. ![]() Я чуть-чуть подредактировал и собрал в кучку
основные изменения по сравнению с предыдущим вариантом - введено поле для ввода адресов страниц. Понятно, что они должны быть в том-же домене, что и страница поиска + добавлена инструкция MsgBox.document.close(); в конце собственно поиска, иначе возникали забавные и не всегда безопасные глюки в разных броузерах. |
Автор: UmmiLab 22.9.2010, 20:10 |
Огромнейшее всем спасибки за помощь!! Вы меня спасли ![]() |