Повторить поиск...
Господа профессионалы!!!
Если есть такая возможность то помогите уже добить этот скрипт до конца))) Вот скрипт
function loadCheck(){
var bquery = $("#ldF999").text().match(/([а-яёa-z]){4,}/gi);
var query = bquery[0];
$('#ressearch').show().html('<span id="searchload"><img src="/loader.gif" border="0"></span>');
$.post('/load/', {query: query, a: 2},
function(rez){
var norez = $(".newslink:first", rez).attr("href");
if (norez==undefined){
$('#ressearch').hide();return;}
window.count = 0;
$(".newslink", rez).each(function(){
window.count = window.count + 1;
if (window.count > 5) return;
var hrf = $(this).attr("href");
var txt = $(this).text();
if(hrf != location.href){
var hrfs = '<table style="width:100%;"><tbody><tr><td><a href="'+hrf+'" class="newpotem">'+txt+'</a></td></tr></tbody></table>';
}
$("#searchload").hide().after(hrfs);
});});}
setTimeout("loadCheck()",1);
Возможно ли,и если возможно то как при условии что if (norez==undefined) повторить поиск с query = bquery[1],если и здесь undefined ,то с query = bquery[2] и так далее до последнего query = bquery[n] |
if (norez == undefined) {
i = 0;
do {
i++;
query = bquery[i];
} while(query == undefined && i <= n);
}
Наверное как то так. |
walik,
Спасибо,но ищет только до query = bquery[1] включительно,а дальше нет |
var i = 0, n = 5, bquery = [], query, norez;
bquery[4] = 'query';
if (norez == undefined) {
do {
i++;
query = bquery[i];
} while(query == undefined && i<= n);
}
alert(query);
|
может я что не так делаю,но не выходит ничего
query почемуто при norez == undefined не присваивает значение следуещего bquery[i] и поиск
$.post('/load/', {query: query, a: 2}
в архиве с материалами с новым query не производится |
НУ ПОМОГИТЕ ЖЕ КТО-НИБУДЬ....УЖ ГОЛОВУ СЛОМАЛ!!!!
|
var i = 0, n = 5, bquery = [], query, norez
bquery[4] = 'query';
if ( !norez ) {
do {
query = bquery[i++];
} while(query == undefined && i<= n);
}
alert ( i );
он не до 1 ищет |
Не хочет и так,выводит материалы если только нашел похожие при query =bquery[0],если же нет то должен искать с query = bquery[1] , материали с таким словом в названии я знаю что точно есть,а он не находит...не говоря уже о query = bquery[2] и дальше...
как уже заставить заново выполняться при norez ==undefined $.post('/load/', {query: query, a: 2} c query равным следующему bquery[] я не знаю...вернее у меня ума не хватает и знаний |
Подсказывали еще так
function loadCheck(num){
num = num || 0;
...
var query = bquery[num];
...
if (norez==undefined){loadCheck(num+1); return false;}
тоже не вышло...:-? |
тот скрипт,что вышел,отлично ищет
какова строка поиска и что вы ищете???
var bquery = $("#ldF999").text().match(/([а-яёa-z]){4,}/gi);
не пойдет дайте нормальную строку. так же с query |
Есть архив материалов на сайте.В виде материалов всеназвания имеют вид
<a href="ссылка на страницу материала" class="newslink">Название материала</a> На странице материала его название имеет вид <div id="ldF999" >Название материала</div> и припомощи скрипта в первом посте вывожу похожие материалы Допустим название такое <div id="ldF999" >Это название этого материала</div> этим получаю массив из слов названия bquery = $("#ldF999").text().match(/([а-яёa-z]){4,}/gi); отбросив ненужное,т.е. цифры,знаки препинания и слова менее чем из четырех букв Присваиваю query = bquery[0] и ищу похожие слова в архиве с помощью поиска $.post('/load/', {query: query, a: 2}, ... Но так ищет только по первому слову из массива bquery Когда query меняю в срипте на другое значение ,к примеру bquery[2] ищет нормально,но вот не получается сделать так чтоб при отсутствии схожих материалов по названию в архиве,атоматически при norez==undefined присвоить query значение следующего слова из массива и повторить поиск схожих материалов Результаты поиска выводятся в <div style=" display: none;overflow: hidden;" id="ressearch"></div> |
надо было расписать так ( я про первые строчки,до $.post )
тогда и понять было бы легче и почему-то у меня неуверенность насчет переменной func и самой рекурсии
// это массив [ название, этого, материала ]
var bquery = "Это название этого материала".match(/([а-яёa-z]){4,}/gi)
// номер слова в массиве
var n = 0;
// ищем "название"
$.post('/load/', {query: bquery[n], a: 2}, function(data){
// ссылка на обработчик результата. т.е. на эту анонимную функцию
var func = arguments.callee;
if( !norez ){
/* что приходит при верном или неверном слове из архива?
у меня будет слово Error */
if( data == 'Error' ) {
// проверка на наличие такого индекса в массиве
if( n < bquery.length ){
/* через половину секунды отсылаем POST-запрос серверу со следующим словом
++n <- это 1. тоесть слово ---> "этого"
важно отметить,что обработчик будет ТАКОЙ ЖЕ, т.е. опять вызовет POST-запрос, но уже с увеличенным "n" ( 3 , слово -> "материала") */
setTimeout( function(){ $.post('/load/', {query: bquery[++n], a: 2}, func); }, 500 );
// мы прошли все элементы массива, поиск неудачен
} else {
alert( 'НЕ НАЙДЕНО' );
}
}
}
});
|
melky,
Получается - ничего не выйдет? |
Ты попробовал ? по логике должно работать
|
пробовал работает отлично,только с одним из любых заданных query=bquery[]
|
Строчку проверки, верный или неверный результат пришел, изменил?
Data=="errOr" нет, верно? |
заменить norez==undefined на Data=="errOr" ?
так не получается |
facepalm
как происходит проверка, нашли ли мы или нет? Цитата:
|
ну как...сдесь же
if (norez==undefined)... |
что отвечает архив? по нем надо сверяться, верен ли результут?
|
отвечает undefined
|
|
Блин вон оно...
когда query = 'слово' в таком виде то возвращает undefined а когда в таком...query = bquery[0] то - location.href |
находит же и "себя" так сказать,только не показывает
if(hrf != location.href) поэтому undefined не может быть,так как новость существует |
вот так заработало
function loadCheck(i){
i = i || 0;
var bquery = $("#ldF999").text().match(/([а-яёa-z]){4,}/gi);
var query = bquery[i];
$('#ressearch').show().html('<span id="searchload"><img src="/loader.gif" border="0"></span>');
$.post('/load/', {query: query, a: 2},
function(rez){
var norez = $(".newslink:first", rez).attr("href");
if (norez==location.href)
{loadCheck(i+1); return false;}
window.count = 0;
$(".newslink", rez).each(function(){
window.count = window.count + 1;
if (window.count > 5) return;
var hrf = $(this).attr("href");
var txt = $(this).text();
if(hrf != location.href){
var hrfs = '<a href="'+hrf+'" class="newpotem">'+txt+'</a>';
}
$("#searchload").hide().after(hrfs);
});});}
setTimeout("loadCheck()",1);
только нужно еще прекратить поиск,когда закончатся bquery[i]; а еще лучше было бы если б убрать if(hrf != location.href) и присвоить условие что если hrf==location.href то <a href="'+hrf+'" class="newpotem">'+txt+'</a> не отображается в результатах (display:none) и если результат является единственным,т.е. только hrf==location.href то тогда loadCheck(i+1); return false; тогда бы и
...
if (norez==undefined)
{loadCheck(i+1); return false;}
...
тоже работало бы...хотя это выражение уже и не было бы нужным,т.к. результат есть всегда хотя бы один,где hrf=location.href вобщем возможно ли вот для такого вида
function loadCheck(i){
i = i || 0;
var bquery = $("#ldF999").text().match(/([а-яёa-z]){4,}/gi);
var query = bquery[i];
$('#ressearch').show().html('<span id="searchload"><img src="/loader.gif" border="0"></span>');
$.post('/load/', {query: query, a: 2},
function(rez){
window.count = 0;
$(".newslink", rez).each(function(){
window.count = window.count + 1;
if (window.count > 5) return;
var hrf = $(this).attr("href");
var txt = $(this).text();
if(hrf == location.href){var hrfs = '';}
else {var hrfs = '<a href="'+hrf+'" class="newpotem">'+txt+'</a>';
}
$("#searchload").hide().after(hrfs);
});});}
setTimeout("loadCheck()",1);
задать условие что при единственном результате где hrf == location.href будет выполняться loadCheck(i+1); return false; |
| Часовой пояс GMT +3, время: 18:41. |