2016-08-18 2 views
-1

Предположим, что у меня есть следующая структура:Jquery Уплотненный Аккордеон Показать только один уровень

<ul> 
    <li>Item 1</li> 
    <li>Item 2</li> 
    <li>Item 3 
     <ul> 
      <li>Item11</li> 
      <li>Item12</li> 
      <li>Item13</li> 
     </ul> 
    </li> 

Эта структура дерева может иметь много уровней.

Сначала я хочу показать следующий список:

Item 1 

Item 2 

Item 3 + 

Когда я нажимаю на + список становится

Item 3 - 

    Item 11 

    Item 12 

    Item 13 

Таким образом, родительский список исчезает и Подсписок показано. Если я нажму -, то все будет возвращено в предыдущий список.

Есть ли какой-нибудь jquery-плагин для этого?

Возможно, некоторые варианты в аккордеоне?

Заранее спасибо.

+0

вы просто хотите, чтобы создавать более глубокие поддеревьев статического контента или вы хотите, чтобы заполнить это с какой-то значимой информации? – Damon

+0

Содержимое является статическим. У меня уже есть этот список. –

+0

просто, не гнезди их. когда элемент 3 открыт, скройте первый из них и покажите следующий. –

ответ

0

Использовал Dkouk свою версию, чтобы создать то, что вам нужно.

EDIT 1: Скрыть другие пункты меню EDIT 2: Меню второго уровня

$(function() { 
 
    
 
    
 
    $('ul li').each(function() { 
 
    if ($(this).find('ul').length > 0){ 
 
    $(this).addClass('child'); 
 
    } 
 

 

 
    
 
    }); 
 
    
 
    $('ul li.child span').click(function() { 
 
    $(this).parent().toggleClass('open').find('ul').first().slideToggle(); 
 
    
 
      $(this).parent().siblings().slideToggle(); 
 

 
    
 
}); 
 
    
 
    
 
});
ul { 
 
    list-style:none; 
 
} 
 
ul li.child span:after { 
 
    content:"+"; 
 
} 
 
ul li.child.open span:after { 
 
    content:"-"; 
 
} 
 
li ul { display:none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
<ul class="main"> 
 
    <li><a href="#">Item 1</a></li> 
 
    <li><a href="#">Item 2</a></li> 
 
    <li> 
 
    <span>Item 3</span> 
 
    <ul> 
 
     <li><a href="#">Item 1</a></li> 
 
     <li> 
 
     <span>Item 2</span> 
 
     <ul> 
 
      <li><a href="#">Item 1</a></li> 
 
      <li><a href="#">Item 2</a></li> 
 
      <li><a href="#">Item 3</a></li> 
 
     </ul> 
 
     </li> 
 
     <li><a href="#">Item 3</a></li> 
 
    </ul> 
 
    </li> 
 
</ul>

+0

Это не работает. Когда я нажимаю Item 3, Item 1 и Item 2 должны исчезнуть. –

+0

Я думаю, что это должно делать все, что вам нужно. :) http://codepen.io/bucky208/pen/ZOkJdy Удалите «-1» :( – Bucky208

+0

Не работает, когда я добавляю еще один уровень глубины. –

-1

Вы можете добавить класс в свой список, когда он есть подсписок, и переключить список и переключить другой класс для родителя списка, чтобы можно было изменить «+» на «-».

Вы можете использовать столько уровней, и код будет работать, Я добавляю span к списку, у которого есть дочерний элемент, но он может запускать щелчок только по тексту, если вы запускаете щелчок для списка LI и открываете подсписку затем снова закроется.

Вы можете создать стиль. Вот простой пример:

$(function() { 
 
     
 
    
 
     $('ul li').each(function() { 
 
     if ($(this).find('ul').length > 0){ 
 
     $(this).addClass('child'); 
 
     } 
 

 

 
     
 
     }); 
 
     
 
     $('ul li.child span').click(function() { 
 
     $(this).toggleClass('open').parent().find('ul:first').slideToggle(); 
 
     $(this).parent().siblings().slideToggle(); 
 
    }); 
 
     
 
     
 
    });
ul { 
 
     list-style:none; 
 
    } 
 
    ul li.child span:after { 
 
     content:"+"; 
 
    } 
 
    ul li.child span.open:after { 
 
     content:"-"; 
 
    } 
 
    ul li ul { display:none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
    <ul> 
 
     <li><a href="#">Item 1</a></li> 
 
     <li><a href="#">Item 2</a></li> 
 
     <li> 
 
     <span>Item 3</span> 
 
     <ul> 
 
      <li><a href="#">Item 1</a></li> 
 
      <li><a href="#">Item 2</a></li> 
 
      <li> 
 
      <span>Item 3</span> 
 
      <ul> 
 
       <li><a href="#">Item 1</a></li> 
 
       <li><a href="#">Item 2</a></li> 
 
      </ul> 
 
      </li> 
 
     </ul> 
 
     </li> 
 
    </ul>

+0

В соответствии с этим фрагментом Item 1, Item 2 видны при щелчке по плюсу. –

+0

Вы можете заставить их щелкнуть, а также пункты 3, которые вы можете сделать, щелкнуть и сдвинуть переключатель дочернего элемента ul внутри него. Если вы хотите, я могу изменить код, чтобы щелкнуть его, если вы не поняли, как это сделать. – Dkouk

+0

Да. Измените код, пожалуйста. –

Смежные вопросы