Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   как эмулировать return на два уровня в jquery (https://javascript.ru/forum/jquery/34268-kak-ehmulirovat-return-na-dva-urovnya-v-jquery.html)

Shitbox2 27.12.2012 08:40

как эмулировать return на два уровня в jquery
 
$('div').each(function () {
    $('p').each(function () {
        return false
    })
})

Нужно выйти и из внешнего цикла, как это сделать? Пробовал try...catch и создавать временную переменную. Есть способы лучше?

Или хотя бы как проверить во внешнем цикле, что внутренний цикл завершился не до конца?

skfyann 27.12.2012 10:34

('div').each(function () {
	var result = true;
	   $('p').each(function () {
	        result = false;
	        return false;
	    })
	if (!result) {
		return false;
	}
})

Shitbox2 27.12.2012 11:46

Это и есть способ с временной переменной

Shitbox2 27.12.2012 12:08

Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 223812)
Совместив селекторы, переделать два цикла в один.

Это как?

Shitbox2 27.12.2012 12:28

Да что такое селекторы, я знаю, но все равно не догоняю как это сделать. Вот мой пример
$.grep(arr, function () {
    $container.find('span').each(function () {
        if (...) return true;
        return false;                   
    })
})

Что и как там совмещать?

Тут понятно, что return должен как-то возвращать из внешней функции

DjDiablo 27.12.2012 12:54

вот твой вопрос.
$('div').each(function () {
    var ret=true;
    $('p').each(function () {
        if( ...) ret=false;
        return ret;

    })
    return ret;
})


c grep чуток всё нетак, если each это цикл то grep это фильтр. А фильтр нельзя завершить, он в любом случае переберёт все элементы

и опять же, мне кажется будет быстрее если не перебирать элементы в массиве и потом искать для каждого элементы в dom
а наоборот перебирать элементы dom и искать соответствия в массиве, так как работа с массивом намного быстрее чем с dom

Поясни пожалуйста ты массив пытаешся отфильтровать или что ?.

Shitbox2 27.12.2012 13:27

Да, извиняюсь, пример нужно было точнее сформулировать. array.every не курил, но судя по всему те же яйца, только в профиль. Там же все равно колбек используется, который будет такой же внутренней функцией.

Впрочем, для своего конкретного случая придумал более изящный вариант http://javascript.ru/forum/223837-post5.html (верхний цикл)

Второй раз ухожу от проблемы выхода из вложенных функций. Надеюсь, что и потом всегда будет проносить)

Shitbox2 27.12.2012 15:54

Точно! Будем пробовать!


Часовой пояс GMT +3, время: 04:33.