Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.11.2013, 15:27
Новичок на форуме
Отправить личное сообщение для otto_n Посмотреть профиль Найти все сообщения от otto_n
 
Регистрация: 17.10.2013
Сообщений: 4

Помогите разобраться с многоуровневым вложением <li>
Здравствуйте.
Занимаюсь самообучением, если у кого-то есть минутка не проигнорируйте направьте меня в правильное логическое русло Не хватает опыта и пока не так много знаний. Передо мной сейчас стоит такая задача
Скажу сразу, что длинные замороченные коды-плагины меню из интернета мне не подходят.
Для меня важно минимальное кол-во строк. Я что-то написал вроде бы по логике должно работать, но последний уровень ul не открывается

http://jsfiddle.net/Eur2r/

Как должно работать: изначально видно только первый уровень списка ul li, по клику должен открыться второй уровень списка для текущего li и аналогично для последнего уровня. Направьте меня где ошибка? Или может здесь увидите, как это реализовать еще проще? При всем при этом каждое нажатие на определенном уровне должно скрывать братьев селекторов и отображать только тот который на котором в данный момент срабатывает событие.
Спасибо за ранее!

Последний раз редактировалось otto_n, 04.11.2013 в 15:57. Причина: Скинул для удобства на ЖСФИДЛ :)
Ответить с цитированием
  #2 (permalink)  
Старый 04.11.2013, 17:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

otto_n,
Сообщение от 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>

Последний раз редактировалось рони, 05.11.2013 в 02:37.
Ответить с цитированием
  #3 (permalink)  
Старый 04.11.2013, 18:18
Новичок на форуме
Отправить личное сообщение для otto_n Посмотреть профиль Найти все сообщения от otto_n
 
Регистрация: 17.10.2013
Сообщений: 4

рони,
Спасибо Вам большое! Это именно то, что нужно.
Ответить с цитированием
  #4 (permalink)  
Старый 04.11.2013, 23:32
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Не очень хороший вариант, не кроссбраузерный, зато без всяких 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>
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение ответа сервера через iframe и xhr. Помогите разобраться. Arconas AJAX и COMET 0 26.02.2013 10:38
Помогите разобраться: false, null?? eirnvn Общие вопросы Javascript 12 12.11.2012 22:22
Помогите пожалуйста девушке разобраться Feni4ka jQuery 10 26.04.2011 19:25
Помогите пожалуйста разобраться Kupu4 Ваши сайты и скрипты 0 21.01.2010 10:44
Помогите разобраться с галереей IMAGIN yana_studio Общие вопросы Javascript 4 12.12.2009 17:24