Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   nextSibling в IE (https://javascript.ru/forum/events/1806-nextsibling-v-ie.html)

Andrew 19.09.2008 13:08

Понятно, доходчиво объяснил, спасибо!

Если не сложно, подскажи еще как можно обратится к нужному мне элементу при клике на <a> (в конструкции, которую я описывал выше) ?

ZoNT 19.09.2008 13:14

А кто тебе нужен? UL?
a.parentNode - li
li.parentNode - ul, значит
a.parentNode.parentNode - ul

Andrew 19.09.2008 18:47

Спасибо, я попробую, о результатах отпишусь :)

Andrew 19.09.2008 23:10

В общем попытался, вот к чему пришел:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<link href="css.css" rel="stylesheet" type="text/css" />
</head>
<body>
<script type="text/javascript">
<!--
function childShowHide(elem, levelNum) {
/*		elem.firstChild.nextSibling.className='show';*/
		elem.nextSibling.className='show';
}

//-->
</script>
<div id="sectionsMenu"><ul id="first"><li onclick="javascript:childShowHide(this, 1); return false;"><a href="#">Бойлеры1</a></li><ul class="hidden"><li><a onclick="javascript:childOpen(this, 2); return false;" href="#">DeDietrich2</a></li><ul class="hidden"><li><a onclick="javascript:childOpen(this, 3); return false;" href="">Ёмкостные водонагреватели3</a></li><ul class="hidden"><li><a href="#">Ёмкостные водонагреватели типа B4</a></li></ul></ul></ul><li><a href="#">Газовые водонагреватели</a></li></ul>
</div>
</body>
</html>


такой вариант работает в FF,а в IE не работает, если раскоментить строчку и закомментить другую в скрипте, то в IE все работает, а в FF нет.

ZoNT 19.09.2008 23:34

Смотри:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Untitled Document</title>
<style>
.hidden {
	display: none;
}
</style>
</head>
<body>
<script type="text/javascript">
<!--
function childShowHide(elem, levelNum) {
/*        elem.firstChild.nextSibling.className='show';*/
        elem.nextSibling.className='show';
}
 
//-->
</script>
<div id="sectionsMenu"><ul id="first"><li onclick="childShowHide(this, 1);" id="xxx"><a href="#">Бойлеры1</a></li><ul class="hidden" id="qqq"><li><a onclick="childOpen(this, 2); return false;" href="#">DeDietrich2</a></li><ul class="hidden"><li><a onclick="childOpen(this, 3); return false;" href="">Ёмкостные водонагреватели3</a></li><ul class="hidden"><li><a href="#">Ёмкостные водонагреватели типа B4</a></li></ul></ul></ul><li><a href="#">Газовые водонагреватели</a></li></ul></div>
<div><a href="#" onclick="childShowHide(this);">3452</a><a href="#" class="hidden"> 123</a></div>
</body>
</html>


Похоже, что у ИЕ проблема с UL.

Andrew 20.09.2008 10:01

вот тебе и кроссбраузерность получилась :) Ну ладно, я уже реализовал по другому, заказчик ждать не будет.

ZoNT, спасибо большое за помощь!

ZoNT 20.09.2008 12:17

не за что... Не помог ведь ничем :)

Andrew 20.09.2008 12:27

Ну почему же, теперь я точно знаю как не стоит строить меню с DOM :) Да и за потраченное время тоже спасбо +)

VictoRRR_85 31.10.2008 23:16

Вы не учли такую вещь как пробелы между тегами. Разные браузеры по-разному интерпретируют переносы в коде. Возможно данная проблема упирается в это. Поэтому имеет смыл делать проверку на тип узла. Вот пример var p=источник_события.previousSibling;
while (p.nodeType!=1){
p=p.previousSibling;
}
перебираем предыдущие узлы пока не найдём тег

Snipe 01.11.2008 10:22

Да, однажды промаялся с каким-то браузером, потому что он пустые символы (табуляция) читал как textNode.
В итоге сейчас делаю getElementsByTagName где возможно.


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