Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск по сайту без ключевых слов 
V
    Опции темы
UmmiLab
Дата 19.9.2010, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 4.10.2007

Репутация: нет
Всего: 1



Здравствуйте! Помогите пожалуйста. Нужен скрипт поиска по сайту без ключевых слов и без помощи поисковых систем.
PM MAIL   Вверх
magelan
Дата 20.9.2010, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 5.4.2010

Репутация: 3
Всего: 16



попытка юмора?

сейчас вы еще добавите, без БД и точно станет понятно, что поиск не нужен.


советую гуглить на предмет устройства поисковых машин.
поиск написанный на коленке, ничего не ищет... только делает вид.
PM MAIL   Вверх
Alexeis
Дата 20.9.2010, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: нет
Всего: 459



magelan, как я понял речь о простом скрипте (лабораторная работа). Типа обойти div / p теги DOM и по совпадению выдать урл. Используется библиотека jQuery . 
 В примерах к ней используется массив Address (возможно это результат работы Гугла), так что сами странички искать не нужно, задача поиска внутри страницы.
Код

...<font face="Verdana,Arial,Helvetica" size="2" color="#000000">'+Keyword[i]+'<BR><A HREF='+Address[i]+' target="_blank">Просмотреть найденную страницу</A>...


P.S. тема создана по моему совету. К сожалению с javascript, а также jQuery не знаком.




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ksnk
Дата 20.9.2010, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Цитата(Alexeis @  20.9.2010,  09:03 Найти цитируемый пост)
В примерах к ней используется массив Address (возможно это результат работы Гугла), так что сами странички искать не нужно, задача поиска внутри страницы.

Все страньше...  smile Массив представляет собой адреса страничек? тогда это не задача поиска внутри одной странички. По крайней мере - ajax подгрузка страничек с поиском в них...
Цитата(UmmiLab @  19.9.2010,  19:31 Найти цитируемый пост)
Нужен скрипт поиска по сайту без ключевых слов

А искать-то что? телепатически выяснять?

Насколько я смог вообразить задачу - это input для ввода строки поиска где-то в начале странички, в которую вводят некое слово. после этого нужно выделить все вхождения этого слова в тексте. Вроде как Ctrl-F в Хроме, только похуже ... Такая задача наиболее близка по смыслу к "лабораторной работе". Впрочем и решений такой задачи довольно много в интернетах.


Это сообщение отредактировал(а) ksnk - 20.9.2010, 09:18


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Alexeis
Дата 20.9.2010, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: нет
Всего: 459



Цитата(ksnk @  20.9.2010,  08:18 Найти цитируемый пост)
Насколько я смог вообразить задачу - это input для ввода строки поиска где-то в начале странички, в которую вводят некое слово. после этого нужно выделить все вхождения этого слова в тексте. Вроде как Ctrl-F в Хроме, только похуже ... Такая задача наиболее близка по смыслу к "лабораторной работе". Впрочем и решений такой задачи довольно много в интернетах.

  Все еще проще, если слово присутствует на странице, то нужно добавить ссылку в список найденных (document.write). Ничего подсвечивать не нужно.

  В примере поиск осуществлялся таким образом 
Код

contains(Item, Keyword[i].toLowerCase()) 


Где Item содержимое едита. contains - это какой-то скрипт из jQuery для сравнения. В данном случае он сравнивает с ключевым словом. В описании библиотеки сказано, что contains умеет не только сравнивать текст, но и искать по тегам, в том числе и по вложенным.
  По идее нужно сделать что-то типа contains(Item, document.<root>) . <root> - имею ввиду доступ к корневому тегу <html>

Ради разнообразия приведу полный код поиска по ключевым словам. По идее с минимальными переделками его можно переделать в поиск по тексту используя contains(Item, document.<root>) . Собственно не зная синтаксиса и особенностей языка правильно сделать это трудно. У меня даже проверить результат не выходит smile 
Код

<HTML>

 <HEAD>
 <TITLE> 04  </TITLE>
<link href="style.css" rel="stylesheet"/>
 </HEAD>

 <BODY>
 <CENTER> <B><H2>Поиск</H2></B>
 </СENTER>
<FORM>
 <p> <INPUT NAME="CONTROL1" TYPE=TEXTBOX VALUE="Введите слово для поиска">
 <script LANGUAGE="JavaScript">
function dolt() {
loopCount=0;
var Found=false
var Item=document.forms[0].sub.value.toLowerCase();

stats='toolbar=no,location=no,scrollbars=yes,directories=no,status=yes,menubar=no,height=500,width=790,top=0,left=0'
stats += 'scrollbars=yes,resizable=yes'
MsgBox = window.open ("","msgWindow",stats) 
MsgBox.opener = window;
MsgBox.opener.name = "opener";

MsgBox.document.write("<head><title>Результаты поиска "+Item+"</title></head>");

 if(document.form1.sub.value=="")
MsgBox.document.write('<h5><font face="Verdana,Arial,Helvetica" color="#0000000">Все найденные страницы<HR></h5></font>');
else
MsgBox.document.write('<h5><font face="Verdana,Arial,Helvetica" color="#0000000">Результаты поиска: '+Item+'<HR></h5></font>');
for(var i=1; i<=Keyword[0]; i++){
contains(Item,Keyword[i].toLowerCase())
if(comp==Item){
loopCount++;
Found=true;

MsgBox.document.write('<div align="center"><center><table border="0" width="740" cellspacing="0" cellpadding="8"><tr><td width="2%" bgcolor="#FFFffF" height="18"align="center">
<font face="Verdana,Arial,Helvetica" size="2" color="#000000"><h5>'+loopCount+'. </h5></font></td>    <td width="150%" bgcolor="#FFFFFF" height="18" align="left"><font color="#000000"></font><fontcolor="#000000">
<font face="Verdana,Arial,Helvetica" size="2" color="#000000">'+Keyword[i]+'<BR><A HREF='+Address[i]+' target="_blank">Просмотреть найденную страницу</A></font></h1></font><font color="#0000000"></font></td></tr></table></center></div>')
MsgBox.document.write('<script Language="JavaScript">window.status=("Total '+loopCount+' found")</'+'script'+'>');
     }
  }

if(!Found)
MsgBox.document.write('<font face="Verdana,Arial,Helvetica" size="2" color="#FF0000">Извините, но по вашему запросу ничего не найдено</font>')
MsgBox.document.write('<font face="Verdana,Arial,Helvetica" size="2" color="#0F219B"><p align="center"><HR></font>')
MsgBox.document.write('<style><!--A:link{color: #FF0000; text-decoration:none} A:visited {color: #FF9950; text-decoration:none}--></style>')
if(loopCount==0){
MsgBox.document.write('<script Language="JavaScript">window.status=("Total 0 found")</'+'script'+'>');
      }
    }
 </SCRIPT>
  <P><INPUT TYPE="button" VALUE="Найти" onclick="dolt();">
 </FORM>

 </BODY>

 </HTML>


 smile Ребяты вам удобно что по умолчанию подсветка HTML? Может вам сменить на JavaScript?


Это сообщение отредактировал(а) Alexeis - 20.9.2010, 15:11


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
bars80080
Дата 20.9.2010, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



Цитата(Alexeis @  20.9.2010,  11:34 Найти цитируемый пост)
Ребяты вам удобно что по умолчанию подсветка HTML?

да. большинство кода javascript идёт вместе с html. тогда гораздо полезнее подстветка по-умолчанию - хтмл. твой код, кстати, из этого же плана. вот только почему ты насильно включил javascript - не понятно. подсветка html нормально обработает и javascript
PM MAIL WWW   Вверх
ksnk
Дата 20.9.2010, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



B]Alexeis[/B], 
Цитата(Alexeis @  20.9.2010,  11:34 Найти цитируемый пост)
Все еще проще, если слово присутствует на странице, то нужно добавить ссылку в список найденных (document.write). Ничего подсвечивать не нужно.

задача, когда возможно всего два варианта - "на этой страничке слово нашлось" и "ничего не нашли" - тривиальна и неинтересна, можно обойтись одним alert'ом.

Без ajax? То есть, предлагается разместить такой сервис на всех страничках сайта, методично, вручную, посредством заказчика ;) пробежатся по ним и прокликать на кнопку "поиск" на всех страничках? В результате, на отдельной вкладке, которая должна появится после первого клика будет скапливаться информация о найденных страничках? 

Document.write тут не самый подходящий инструмент. Возникнут довольно забавные сложности с общением между вкладками. Их можно реализовать на куках. одно окно будет искать и вываливать информацию в куку, из которой окно с результатами будет выковыривать информацию по таймауту. после чего ее опустошать. 

В качестве прикола или трудотерапии такую задачу еще можно себе представить, но в качестве лабораторной - уже нет... Imho ajax все-таки - более человеколюбивое решение  smile 

Хотя, web-паучек для сайта на javascript - довольно забавное и, вероятно, полезное в чем-то, существо. Может его кто-нибудь уже делал? надо б поискать... Если сайт маленький и не страшно его подосить таким образом - почему бы и не прикрутить?

Собственно, поиск в одной страничке достаточно тривиален. Что-нибудь вроде:
Код

function contains(key,domelement){
   if(!key || key.length==0) return false; // с этими привидениями к логическому я уже путаюсь  :crazy 
   return $(domelement).text().toLowerCase().indexof(key.toLowerCase())!=-1;
}

// использование
// if(contains($('#search').val(),document.body)){ ... ; } // хотя тут надо поэкспериментировать...


Хотя насчет того, что весь body во всех броузерах с удовольствием отдаст весь свой текстовый контент со всеми вложенными дивами с учетом скрытых элементов, я почему-то сомневаюсь...

Если нужно искать фразу - нужно аккуратно прослешить фразу так. чтобы ее можно было безопасно вставить в регулярку, заменив служебные символы на прослешенные и пробелы на \s+ и сделать вместо indexof match с получившейся регуляркой...
Если фраза - просто набор слов - вместо пробелов поставить |...

 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Alexeis
Дата 20.9.2010, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: нет
Всего: 459



Цитата(ksnk @  20.9.2010,  14:16 Найти цитируемый пост)
Без ajax? То есть, предлагается разместить такой сервис на всех страничках сайта, методично, вручную, посредством заказчика ;) пробежатся по ним и прокликать на кнопку "поиск" на всех страничках? В результате, на отдельной вкладке, которая должна появится после первого клика будет скапливаться информация о найденных страничках? 

  Хм... действительно, ведь контент нужно подгружать с других веб страниц. Т.е. чтобы выполнить условие задачи нужно сначала создать невидимый тег типа meta, затем в него загрузить страницу, дождаться загрузки, сделать поиск, удалить содержимое, загрузить контент следующей страницы и т.д. В принципе реализуемо, но мне кажется что для лабораторной сложновато.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Alexeis
Дата 21.9.2010, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: нет
Всего: 459



  Таки добил решение, правда набор страниц сайта пришлось забить массивом. Подгрузку страниц сделал при помощи скрипта $.get (AJAX), который по окончанию загрузки передает в калбэк функцию html текст страницы, калбэк функция берет следующую ссылку и рекурсивно вызывает себя до тех пор пока не переберет весь список до конца. 
  
Получилось очень даже просто.
Код

<script LANGUAGE="JavaScript">

var Item = "";
var index = 0;
var MsgBox;

function dolt() 
{
    Item=document.forms[0]['CONTROL1'].value.toLowerCase();

    stats='toolbar=no,location=no,scrollbars=yes,directories=no,status=yes,menubar=no,height=500,width=790,top=0,left=0'
    stats += 'scrollbars=yes,resizable=yes'
    MsgBox = window.open ("","msgWindow",stats) 
    MsgBox.opener = window;
    MsgBox.opener.name = "opener";
    MsgBox.document.write("<head><title>Результаты поиска "+Item+"</title></head>");

    if(document.forms[0]['CONTROL1'].value=="")
        MsgBox.document.write('<h5><font face="Verdana,Arial,Helvetica" color="#0000000">Все найденные страницы<HR></h5></font>');
    else
        MsgBox.document.write('<h5><font face="Verdana,Arial,Helvetica" color="#0000000">Результаты поиска: '+Item+'<HR></h5></font>');
    
    function enumsites(data)
    {
        index++; 
        var tagtext = data + "";
        if(tagtext.toLowerCase().indexOf(Item)!=-1)
           MsgBox.document.write('<BR><A HREF='+Address[index-1]+' target="_blank">Просмотреть найденную страницу</A>');
 
        if (index <= Address.length) 
            $.get(Address[index], enumsites);  
    }

    $.get(Address[0], enumsites);
}

 </SCRIPT>




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ksnk
Дата 21.9.2010, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Ну, для человека не знакомого с jQuery и javascript - очень даже хорошо. smile
Я чуть-чуть подредактировал и собрал в кучку
Код

<HTML>
 <HEAD>
 <TITLE> 04  </TITLE>
<link href="style.css" rel="stylesheet"/>
<script type="text/javascript" src="jQuery.js"></script>
</HEAD>
 <BODY>
 <CENTER> <B><H2>Поиск</H2></B>
 </СENTER>
<FORM>
 <p> <INPUT id='searchstr' NAME="CONTROL1" TYPE=TEXTBOX VALUE="Введите слово для поиска"><p>
<textarea id='Address'>
test.html
</textarea>
<script type="text/javascript">
function dolt() 
{
    var 
         Address = $('#Address').val().split(/[\r\n\s]+/)
        ,Item=$('#searchstr').val().toLowerCase()
        ,MsgBox = window.open ("","msgWindow",'toolbar=no,location=no,scrollbars=yes'
            +',directories=no,status=yes,menubar=no'
            +',height=500,width=790,top=0,left=0'
            +',scrollbars=yes,resizable=yes'
        );
    MsgBox.opener = window;
    MsgBox.opener.name = "opener";
    MsgBox.document.write("<head><title>Результаты поиска "+Item+"</title></head>");
    if(Item=="")
        MsgBox.document.write('<h5><font face="Verdana,Arial,Helvetica" color="#0000000">Все найденные страницы<HR></h5></font><ol>');
    else
        MsgBox.document.write('<h5><font face="Verdana,Arial,Helvetica" color="#0000000">Результаты поиска: '+Item+'<HR></h5></font><ol>');
    
    function enumsites()
    {
        var addr='';
        if(Address.length<1) {
            MsgBox.document.write('</ol></body></html>');
            MsgBox.document.close();
            return ;
        }
        addr= Address.shift();
        $.get(addr, function(data){
            var tagtext = data + "";
            if(tagtext.toLowerCase().indexOf(Item)!=-1)
                MsgBox.document.write('<li><A HREF='+addr+' target="_blank">Просмотреть найденную страницу</A></li>');
 
            enumsites();
        })
    }
    enumsites();

}
 </SCRIPT>

  <P><INPUT TYPE="button" VALUE="Найти" onclick="dolt();">
 </FORM>
 </BODY>
 </HTML>


основные изменения по сравнению с предыдущим вариантом - введено поле для ввода адресов страниц. Понятно, что они должны быть в том-же домене, что и страница поиска +  добавлена инструкция MsgBox.document.close(); в конце собственно поиска, иначе возникали забавные и не всегда безопасные глюки в разных броузерах.





--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
UmmiLab
  Дата 22.9.2010, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 4.10.2007

Репутация: нет
Всего: 1



Огромнейшее всем спасибки за помощь!! Вы меня спасли smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0913 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.