|
|
|
|
while(o.tagName != "DIV" && o.className.indexOf("flat") == -1)
o = o.parentNode;
|
немогу допетрать как остановить луп только тогда когда o.tagName == "DIV" и если проходит первое условие на таг проверить есть ли у этого элемента класс flat..
помогите:) | |
|
|
|
|
|
|
|
для: sl1p
(03.02.2010 в 00:25)
| | вот, сделал так, но интересно было бы узнать как это реализовать в примере выше..
while(true) {
o = o.parentNode;
if(o.tagName == "DIV" && o.className.indexOf("flat") > -1)
break;
}
|
| |
|
|
|
|
|
|
|
для: sl1p
(03.02.2010 в 00:25)
| | А ничего делать не надо.
Вообще ничего.
У вас и так в первом сообщении написан код, который выполняет именно то, что вам и надо.
Логический оператор AND (&&) исполняется следующим образом: вычисляется результат первого выражения. Если результат первого выражения true, то только тогда вычисляется результат второго выражения. А если первое выражения - false, то второе выражение с целью экономии времени и ресурсов никогда не вычисляется.
См. пример:
<script>
//переменная SECOND не определена вообще
//если написать alert (SECOND), то alert-окошко не появится, ибо ошибка "Переменная не определена"
//определим переменную FIRST
var FIRST = false;
//выведем условие
alert (FIRST && SECOND);
//безо всяких проблем/ошибок увидим alert-окошко, в котором будет написано false
</script>
|
Т.е., если тег != 'DIV', то имя класса браузер проверять не будет гарантированно, а просто остановит цикл. | |
|
|
|
|
|
|
|
для: АЯ
(03.02.2010 в 01:40)
| | хм..
а почему остановится, если в таком случае:
while(o.className.indexOf('photo') == -1) o = o.parentNode;
return o;
|
проходится неогр. кол-во тегов? | |
|
|
|
|
|
|
|
для: sl1p
(03.02.2010 в 01:49)
| | Странный вопрос.
Пишете сначала про СЛОЖНОЕ условие, затем приводите пример с ПРОСТЫМ условием и спрашиваете - "почему не останавливается?" :-)
while (условие_1) переводится на русский как "делать что-то, ПОКА выполняется условие_1".
В примере с вашим (простым) условием, если в дереве вовсе НЕТ тегов с именем класса photo, цикл работать будет вплоть до конца родительского дерева, т.е. до тега <HTML>. А потом даст ошибку - у "последнего" тега НЕТ родителя.
Если условие у вас с оператором AND, например, while (условие_1 && условие_2), т.е. "делать что-то, пока женщина (1) с именем Аня (2)", то работать это будет так:
-- проверяем - "женщина" ли?
-- если женщина, то узнаём имя этой женщины (Аня - продолжаем, не Аня - останавливаемся).
-- а вот если мужик, то имя у него спрашивать уже не будем. И не потому, что мужиков с именем Аня не бывает. А потому, что - "мужик", а не "женщина" - первое условие не выполнено. Просто СРАЗУ остановимся (перестанем "делать что-то"). | |
|
|
|
|
|
|
|
для: АЯ
(03.02.2010 в 02:54)
| | хм ну так более менее я понял, но стыдно признаться не до конца:)
ну да ладно.. спасибо большое за попытку объяснить!
значит мой второй пост для моей цели более подходит?
или можно сделать както интеерсней? | |
|
|
|
|
|
|
|
для: sl1p
(03.02.2010 в 12:33)
| | Я написал: "У вас и так в первом сообщении написан код, который выполняет именно то, что вам и надо."
В ответ на это получаю: "значит мой второй пост для моей цели более подходит?"
"Я офигеваю, дорогая редакция" (с) | |
|
|
|
|
|
|
|
для: АЯ
(03.02.2010 в 13:16)
| | мда
я же написал что он работает не так как мне надо, нужно чтобы останавливалось на DIV с классом flat, оно же останавливается на на первом попавшемся DIV
теперь яснее? | |
|
|
|
|
|
|
|
для: sl1p
(03.02.2010 в 13:59)
| | while (условие_1) выполняется ДО ТЕХ ПОР, пока условие_1 является истинным. Т.е. истинность условия_1 - это УСЛОВИЕ ПРОДОЛЖЕНИЯ ЦИКЛА.
Вы же пытаетесь трактовать истинность условия_1 как УСЛОВИЕ ОСТАНОВКИ ЦИКЛА.
Вывод: измените условие на (!(o.tagName != "DIV" && o.className.indexOf ("flat") < 0)) | |
|
|
|
|
|
|
|
для: АЯ
(03.02.2010 в 14:14)
| | о теперь понятно, спасибо :) | |
|
|
|