#javascript #jquery #while-loop
#javascript #jquery #цикл while
Вопрос:
У меня есть функция, которая добавляет в div-контейнер div
$.ajax(
{
type: "GET",
url: "/LoadedData",
data: { "pageNumber": pageNumber },
success: function (result) {
$('.Container').append(result);
}
}
и я хочу выполнять эту функцию до тех пор, пока этот контейнер div не будет содержать div с значением xxx
Я пытаюсь сделать это с помощью цикла while, но выглядит так, когда я делаю :
while($('.Container div').is('#xxx'))
{}
функция не видит новые div, добавленные к контейнеру :/
Ответ №1:
Поместите свой код в функцию, которая рекурсивно вызывается в, callback:
если result
не соответствует вашему селектору.
Он будет продолжать выполняться до тех пор, пока селектор не будет подобран.
var container = $('.Container'); // cached the .Container element
function add_to_container() {
$.ajax(
{
type: "GET",
url: "/LoadedData",
data: { "pageNumber": pageNumber },
success: function (result) {
container.append(result);
if( !$(result).is("#xxx") ) { // if the result was not the one...
add_to_container(); // ...recursively call the function
}
}
}
}
Комментарии:
1. @netmajor: Какого типа производительность? Если вы имеете в виду общее время, необходимое для получения надлежащего
#xxx
результата, то да, запросы отправляются последовательно, и поэтому это займет больше всего времени. Вы могли бы отправить кучу запросов, но нет гарантии, что они вернутся в том же порядке. Или вы могли бы заставить свой сервер отправлять пакеты результатов, выполнять поиск по результатам, добавлять их, если#xxx
они не найдены, или добавлять те, что выше,#xxx
если они найдены. Я бы сказал, чтоwhile
цикл определенно не является правильным подходом.
Ответ №2:
В Jquery есть функция each для перебора элементов dom.
$('.Container div').each(function(){});