jQuery accordion — пропустить элемент списка

#javascript #jquery #jquery-ui

#javascript #jquery ( jquery ) #jquery-пользовательский интерфейс #jquery

Вопрос:

Я использую аккордеон jQuery для UL, где БОЛЬШИНСТВО элементов LI должны стать аккордеонами, каждый из которых показывает список ссылок под ними. Работает нормально. Но тогда, конечно, клиент хочет, чтобы пара узлов в списке были просто отдельными ссылками в списке. У них нет категории, и они находятся на самом высоком уровне.

Есть ли способ, используя аккордеон jQuery, чтобы я мог сказать ему пропустить узел? В настоящее время я нацеливаю метод accordion() на узел UL, и он превращает каждый LI в аккордеон. Когда я нацеливаюсь на каждый li по отдельности, все выглядит странно.

Так что я бы хотел чего-то вроде:

 <ul class="accordion">
  <li class="leavemealone"><A>mylink</a></li>
  <li><h3>title</h3><div>list of stuff to be inside the accordion</div></li>
</ul>
  

Или какой-то эквивалент. Я не вижу этого в документе. существует ли такая вещь?

Комментарии:

1. Нацелитесь на класс li leavemealone и оберните исключение для этого вокруг кода. if (!$(«li»).hasClass(«leavemealone»)) { остальная часть вашего кода }

2. См headers . : api.jqueryui.com/accordion/#option-header

Ответ №1:

Для разметки вашего контейнера accordion требуются пары заголовков и панелей содержимого:

 <div id="accordion">
  <h3>First header</h3>
  <div>First content panel</div>
  <h3>Second header</h3>
  <div>Second content panel</div>
</div>
  

Аккордеоны поддерживают произвольную разметку, но каждая панель содержимого всегда должна быть следующей после соответствующего заголовка. Смотрите header опцию для получения информации о том, как использовать пользовательские структуры разметки.

Если мы затем посмотрим header , мы увидим:

Селектор для элемента заголовка, применяемый через .find() к основному элементу аккордеона. Панели содержимого должны быть родственными сразу после связанных с ними заголовков.

Итак, если мы определяем заголовок, содержимое должно быть родственным. Это отлично работает, если каждый li из них представляет собой пару заголовка и содержимого.

Рассмотрим следующий пример.

 $(function() {
  $("#accordion").accordion({
    header: "li.header",
  });
});  
 <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

<ul id="accordion">
  <li class="leavemealone"><a href="#">mylink</a></li>
  <li class="header">Section 1</li>
  <li>
    <p>Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut odio. Curabitur malesuada. Vestibulum
      a velit eu ante scelerisque vulputate.</p>
  </li>
  <li class="header">Section 2</li>
  <li>
    <p>Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In suscipit faucibus urna.</p>
  </li>
  <li class="header">Section 3</li>
  <li>
    <p>
      Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis. Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis lacinia ornare, quam ante aliquam
      nisi, eu iaculis leo purus venenatis dui.
    </p>
    <ul>
      <li>List item one</li>
      <li>List item two</li>
      <li>List item three</li>
    </ul>
  </li>
  <li class="header">Section 4</li>
  <li>
    <p>
      Cras dictum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia mauris vel est.
    </p>
    <p>
      Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
    </p>
  </li>
</ul>  

Как вы можете видеть, каждый li из них становится контейнером, и это либо заголовок, либо его содержимое. Таким образом, вам не нужно использовать h3 or div в качестве обертки.

Ответ №2:

вы должны поместить другой аккордеон под тег li в качестве гнездового аккордеона

 <ul class="accordion"> 
   <li class="leavemealone"><A>mylink</a></li>
   <li><h3>title</h3> 
   <ul class="accordion2">
   <li class="leavemealone2"><A>mylink</a></li>
   <li><h3>title</h3></li>
  </ul>
  </li>
</ul>