Повторить поиск...
Господа профессионалы!!!
Если есть такая возможность то помогите уже добить этот скрипт до конца))) Вот скрипт 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, время: 02:47. |