Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Обработка стиля дочернего элемента


Автор: Vermaxt 18.10.2009, 12:06
Код примерно такого содержания
HTML разметка
Код

<ul>
    <li><a href="#" onMouseOver="changer(this)">Меню</a>
        <ul>
            <li><a href="#">Подменю</a></li>
            <li><a href="#">Подменю</a></li>
        </ul>
    </li>
</ul>

/===========================================/
js сценарий
Код

function changer(element){
    var child = element.firstChild;
    child.style=(child.style=='none') ? 'block' : 'none';
}

Думаю что все поняли что это раскрывающееся меню. Дак вот...вроде все делаю правильно...но почему то не работает. В чем ошибка подскажите?

Автор: Kevin 18.10.2009, 12:45
Вместо 
Код
var child = element.firstChild;

должно быть: 
Код
var child = element.parentNode.getElementsByTagName('ul').item(0);


Ибо Вам необходимо не «детей» искать, а «братьев» ;-)

Автор: Vermaxt 18.10.2009, 13:01
Все работает спасибо...но вот только я не понимаю... ul же будет являться ребенком li...и по идее его надо скрывать или показывать...

Автор: Vermaxt 18.10.2009, 13:20
аааа все понял понял понял)))))

Добавлено через 6 минут и 40 секунд
А вот почему этот код не работает 
Код

var child = element.nextSibling;


Ну я имею ввиду если определять вот так братский элемент))

Автор: Kevin 18.10.2009, 13:55
Потому что он находит перенос строки и отступ.
Надо проверять полученный объект с помощью nodeType 
и искать брата, пока nodeType не будет равен 1.

UPD: Если не понятно, то вот пример:

Код
var child = element.nextSibling;
while (child.nodeType != 1) {
    child = child.nextSibling;
}

Автор: Vermaxt 18.10.2009, 14:07
Все разобрался)) Спасибо!!

Автор: Kevin 18.10.2009, 14:11
Еще надо будет не забыть проверить 
существование child-a (child != null), 
а то работа скрипта прервется 
из-за ошибки, если обратиться к тому, 
что не найдено ;-)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)