Помогите разобраться с многоуровневым вложением <li>
Здравствуйте.
Занимаюсь самообучением, если у кого-то есть минутка не проигнорируйте направьте меня в правильное логическое русло :)Не хватает опыта и пока не так много знаний. Передо мной сейчас стоит такая задача Скажу сразу, что длинные замороченные коды-плагины меню из интернета мне не подходят. :( Для меня важно минимальное кол-во строк. Я что-то написал вроде бы по логике должно работать, но последний уровень ul не открывается :( http://jsfiddle.net/Eur2r/ Как должно работать: изначально видно только первый уровень списка ul li, по клику должен открыться второй уровень списка для текущего li и аналогично для последнего уровня. Направьте меня где ошибка? Или может здесь увидите, как это реализовать еще проще? При всем при этом каждое нажатие на определенном уровне должно скрывать братьев селекторов и отображать только тот который на котором в данный момент срабатывает событие. Спасибо за ранее! |
otto_n,
Цитата:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> <script src="http://code.jquery.com/jquery-1.9.1.js"></script> <script> $(window).load(function(){ $("#oneLevelNav li > ul ").hide(); $("#oneLevelNav ul").each(function(indx, element){ $(element).click(function(event){ event.stopPropagation()}); var li = $(element).parent('li'); li.click(function(event){ event.stopPropagation(); if($(element).is(':visible')) {$(element).hide()} else { li.siblings().find('ul').hide(); $(element).show()} }) }); }); </script> </head> <body> <header> <ul id="oneLevelNav" class="levelOne"> <li id="tel"><a href="#">Телефоны</a> <ul id="twoLevelNav_tel" class="levelTwo"> <li id="tel_sam"><a href="#">Samsung</a> <ul id="threeLevelNav_tel_sam" class="levelThree"> <li><a href="#">1</a></li> <li><a href="#">2</a></li> </ul> </li> <li id="tel_app"><a href="#">Apple</a> <ul id="threeLevelNav_tel_app" class="levelThree"> <li><a href="#">5</a></li> <li><a href="#">6</a></li> </ul> </li> <li id="tel_htc"><a href="#">HTC</a> <ul id="threeLevelNav_tel_htc" class="levelThree"> <li><a href="#">8</a></li> <li><a href="#">9</a></li> </ul> </li> <li id="tel_nok"><a href="#">Nokia</a> <ul id="threeLevelNav_tel_nok" class="levelThree"> <li><a href="#">11</a></li> <li><a href="#">12</a></li> </ul> </li> </ul> </li> <li id="pad"><a href="#">Планшеты</a> <ul id="twoLevelNav_pad" class="levelTwo"> <li id="pad_sam"><a href="#">Samsung</a> <ul id="threeLevelNav_pad_sam" class="levelThree"> <li><a href="#">14</a></li> <li><a href="#">15</a></li> </ul> </li> <li id="pad_app"><a href="#">Apple</a> <ul id="threeLevelNav_pad_app" class="levelThree"> <li><a href="#">17</a></li> <li><a href="#">18</a></li> </ul> </li> </ul> </li> <li id="NB"><a href="#">Ноутбуки</a> <ul id="twoLevelNav_NB" class="levelTwo"> <li id="nb_sam"><a href="#">Samsung</a> <ul id="threeLevelNav_NB_sam" class="levelThree"> <li><a href="#">18</a></li> <li><a href="#">19</a></li> </ul> </li> <li id="nb_app"><a href="#">Apple</a> <ul id="threeLevelNav_NB_app" class="levelThree"> <li><a href="#">21</a></li> <li><a href="#">22</a></li> </ul> </li> </ul> </li> </ul> </header> </body> </html> |
рони,
Спасибо Вам большое! Это именно то, что нужно. |
Не очень хороший вариант, не кроссбраузерный, зато без всяких jQuery (советую кстати начать изучение без использования всяких либ, что так сказать, понимать что происходит под капотом):
<!DOCTYPE html> <html> <head> <style type="text/css"> .tree a{ cursor: pointer; } </style> </head> <body> <ul class="tree"> <li> <a>Телефоны</a> <ul> <li> <a>Apple</a> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> </ul> </li> <li> <a>Samsung</a> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> </ul> </li> </ul> </li> <li> <a>Планшеты</a> <ul> <li> <a>Apple</a> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> </ul> </li> <li> <a>Samsung</a> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> </ul> </li> </ul> </li> <li> <a>Ноутбуки</a> <ul> <li> <a>Apple</a> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> </ul> </li> <li> <a>Samsung</a> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> </ul> </li> </ul> </li> </ul> <script> var tree = document.querySelector('.tree'); var labels = tree.querySelectorAll('a'); var onLabelClick = function(event) { event.preventDefault(); var li = this.parentNode; var ul = li.parentNode; var active = ul.dataset.active; if (active != null) { ul.children[active].lastElementChild.style.display = 'none'; } var subtree = this.nextElementSibling; var isHidden = subtree.style.display == 'none'; subtree.style.display = isHidden ? '' : 'none'; ul.dataset.active = Array.prototype.indexOf.call(ul.children, li); }; Array.prototype.forEach.call(labels, function(label) { if (!label.href) { label.addEventListener('click', onLabelClick); var subtree = label.nextElementSibling; subtree.style.display = 'none'; } }); </script> </body> </html> |
Часовой пояс GMT +3, время: 01:20. |