Когда у меня еще не было своего места в интернете (хостинга), под мои странички, я ставил эксперименты на статических страницах (наверно многие так делали|делают). У меня была специальная папка на рабочем столе, где хранились всякие написанные мной "страницы". Вскоре я собрал все эти страницы в одну "кучу" и получился "сайт". Чтобы странички выглядели более привлекательнее, я искал в интернете скрипты на JavaScript и внедрял их в свой первый "проект". Через какое то время, мне в голову бьет идея - внедрить поиск по сайту и сразу полез в поисковик искать скрипт поиска по сайту, но все скрипты, что мне выдал поисковик были написаны на php, а это мне не подходило. Но! Кто ищет, тот всегда найдет! Нашел скрипт написанный на JavaScript, который выполняет поиск по сайту и выводит результаты.
На самом деле сценарий не выполняет поиск по сайту, не сканирует страницы, не делает запроса в базу, он ищет в специальной, подготовленной базе, где были небольшие предложения и адреса страниц, куда должен попасть человек, если нажмет на выбранный пункт в поисковой выдачи. Сценарий пробегает по предложениям и если находит совпадения, то "откладывает" предложение и ссылку, затем выводит список найденного в новом окне. Сценарий называется DB search, скачать его можно тут: {удалено: сайт больше недоступен}. Я его немного исправил, перевел на русский язык, добавил краткое описание, сделал заголовок в виде ссылки и дописал адрес страницы, под описанием, а так же код привел к более современному виду.
Давайте перейдем к форме поиска, вот так она выглядит:
<script type="text/javascript" src="database.js"></script>
<form method="POST" name:"finding">
<input type="text" name:"sub" size:"20">
<input type="button" value="Найти" onClick="dolt();"><ul>
</form>
Форма, как форма, ни чего сверхъестественного в ней нет. Над формой подключается JS файл, где у нас будет база для поиска и сценарий, который будет выполнять поиск и выводить результаты на экран. Сам сценарий выглядит так (с моими доработками):
var title = [];
var description = [];
var address = [];
var sum = 2;
title[1] = 'Поиск по сайту на JavaScript';
description[1] = 'Как подсказывает мне коллега - эта тема не актуальна, и понятно почему, так как поиск по сайту должен выполняться на стороне сервера, а JS выполняется на стороне клиента.';
address[1] = 'https://danfa.net/blog/197/';
title[2] = 'Отображение прогресса выполняемой задачи (JavaScript)';
description[2] = 'Решил, для примера, написать простой скрипт (JS), который отображал бы текущий процент выполнения, какой то задачи. В моем примере будет просто заполняться полоса до полного, а рядом счетчик процентов, до 100%.';
address[2] = 'https://danfa.net/forum/thread/487/';
function contains(sub, s) {
var strlen1 = sub.length;
var strlen2 = s.length;
var istrue = false;
for(var i = 0; i <= strlen2; i++) {
comp = s.substring(i - 1, strlen2);
comp = comp.substring(0, strlen1);
if(comp == sub) {
istrue = true;
break;
}
}
return istrue;
}
function dolt() {
var loopCount = 0;
var Found = false;
var Item = document.forms[0].sub.value.toLowerCase();
var stats ='toolbar = no, location = no, scrollbars = yes, directories = no, status = yes, menubar = no, scrollbars = yes, resizable = yes, height = 500, width = 790, top = 20, left = 20';
MsgBox = window.open('', 'msgWindow', stats);
MsgBox.opener = window;
MsgBox.opener.name = 'opener';
MsgBox.document.write('<!DOCTYPE html><html><head><title>Результат поиска слова: ' + Item + '</title></head><body>');
if (document.finding.sub.value == '') {
MsgBox.document.write('<h5><font face="Arial">Список всех ссылок:<hr></h5></font>');
}
else {
MsgBox.document.write('<h5><font face="Arial">Результаты поиска слова: "' + Item + '":<hr></h5></font>');
}
for (var i = 1; i <= sum; i++) {
contains(Item, title[i].toLowerCase());
if (comp == Item) {
loopCount++;
Found = true;
MsgBox.document.write('<div align="center"><table border="0" width="740" cellpadding="8"><tr><td width="2%" align="center"><font face="Arial" size:"2">' + loopCount + '.</font></td><td width="98%" height="18" align="left"><font face="Arial" size:"2"><a href="' + address[i] + '" target="_blank"><strong>' + title[i] + '</strong></a></font><br /><font face="Arial" size:"2">' + description[i] + '<br /><i>Адрес страницы: ' + address[i] + '</i></font></td></tr></table></div>');
MsgBox.document.write('<script type="text/javascript">window.status=(' + loopCount + ')</script>');
}
}
if (!Found) {
MsgBox.document.write('<font face="Arial">Совпадений не найдено.</font>');
}
MsgBox.document.write('<hr><font face="Arial">Поиск по сайту на JavaScript</font></body></html>');
if (loopCount == 0) {
MsgBox.document.write('<script type="text/javascript">window.status=(0)</script>');
}
}
База состоит из трех массивов:
- title - Заголовок страницы.
- description - Описание страницы.
- address - Адрес страницы.
Заполнять значения всех трех массивов надо с единицы, а не так как мы привыкли, с ноля.
Значение переменной
sum
должно соответствовать количеству значений одного из массивов, кстати количество значений у этих трех массивов должно быть одинаковое.Надеюсь это кому ни будь пригодиться.
Спасибо за внимание.