Здраствуйте ! Я абсолютный новичок (ноль) в JavaScript. Мне нужно организовать поиск в массиве(вах) данных по словам. У меня есть скрипт, но он ищет только по первым словам в данных, чуствителен к регистру и не может найти и отобразить несколько результатов поиска по категориям. Категории описаны начиная с var iNumber = 1; Если кому-нибудь не сложно, поправьте скрипт или хотя бы подскажите что изменить чтобы реализовать: поиск и отображение нескольких результатов, поиск по любому слову и не чуствительность к регистру (не обязательно). Вот тот самый скрипт:
<script language="JavaScript">
<!--
function createArray(length)
{
this.length = length;
for( var i = 1; i<= length; i++)
this[i] = null;
return this;
}
// ********************** Some Preparation Data ******************************************
var Entries = 5; // Количество записей в базе данных
var Separator = ";" // Разделитель для элементов данных
var Fields = 5; // Количество данных по одному письму
var iNumber = 1;
var iDate = 2;
var iTitle = 3;
var iSender = 4;
var iTarget = 5;
// *********************** Now create the Array *******************************************
var Data = new createArray(Entries);
// *********************** Type in your Data below *****************************************
Data[1] = "1;09.06.2006;Ответы на вопросы для ОАО ПИ 'Синтез ПАВ';ОАО ПИ 'Синтез ПАВ';Мельник Г.В. Вамбольдт Ю.А.";
Data[2] = ""; // Под Дата1 пример организации данных для поиска. В остальных блоках будут подобные данные.
Data[3] = "";
Data[4] = "";
Data[5] = "";
// ********************** End of Data Block **********************************************
// ********************* Begin Common functions *****************************************
var LastMatch = 0; // Store Last Matched Data Index
function GetField(Entry,number) // Count begins with 1, f.e. GetField(Data[1] ,1) returns Walkowiak
{
var Out = "";
var FirstChar;
var LastChar;
FirstChar = 0;
LastChar = Entry.indexOf(Separator) ;
if (number == 1)
{
Out += Entry.substring(FirstChar,LastChar);
return Out;
}
if (number == Fields)
{
Out+= Entry.substring(Entry.lastIndexOf(Separator) + 1,Entry.length)
return Out;
}
for(var i =2; i <= number; i++)
{
FirstChar = LastChar + 1;
LastChar = Entry.indexOf(Separator, FirstChar);
}
Out += Entry.substring(FirstChar,LastChar);
return Out;
}
function FindNext(String, number) // number is the number of the field to search in
{
var CompareWith = "";
for(var i = LastMatch + 1; i <=Data.length; i++)
{
var buf = GetField(Data[i],number);
var bl = parseInt(buf.length);
var sl = parseInt(String.length);
if(bl > sl)
{
CompareWith = buf.substring(0,sl );
}
else
{
CompareWith = buf;
}
if (CompareWith == String)
{
LastMatch = i;
return i;
}
}
LastMatch = 0;
return 0;
}
// ******************************* Custom functions for this document********************************
function ResetSearch()
{
LastMatch = 0;
for(var i = 1; i <=Fields; i++)
{
document.SearchForm.elements[i+3].value = "";
}
}
function TypeNext()
{
var SearchString = document.SearchForm.Text.value;
var index =document.SearchForm.elements[3].options.selectedIndex + 1;
var j = FindNext(SearchString, index);
if (j == 0)
{
alert("Достигнут конец списка, элемент не обнаружен ! \nНажмите 'Сброс' чтобы запустить поиск с начала списка.");
ResetSearch();
return;
}
var buf = "";
for(var i = 1; i <=Fields; i++)
{
buf = GetField(Data[j],i);
document.SearchForm.elements[i+3].value = buf;
}
}
// -->
</script>
P.s. Я не собираюсь извлекать из него коммерческую выгоду, только упростить жизнь людям в виде поиска по данным.