如何使用jQuery或CSS在特定元素之前获取下一个元素

时间:2015-05-04 13:15:10

标签: jquery css

我有一个结构:

<div class="faq-section">

  <h4>1. Wie reserviere ich mir einen Platz, wenn ich einen Gutschein habe?</h4>
  <p>Es gibt für Gutscheinbesitzer 2 Wege um sich einen Platz am Himmel bei uns zu reservieren.</p>
  <ul>
    <li>Sie können sich telefonisch  Mo-Fr 09.00-17.00 Uhr unter <strong>056 667 27 08 </strong>oder</li>
    <li>Sie nutzen unser elektronisches Reservationsformular, welches  Sie <a title="Reservation" href="34-0-Reservation.html"> hier </a>finden.</li>
  </ul>

  <h4>2. Wie lange dauert eine Ballonfahrt?</h4>
  <p>Je nach Angebot das Sie wählen hat eine Ballonfahrt unterschiedliche Dauer in der Luft. Der Ablauf VOR- und NACH-&nbsp; der Ballonfahrt ist jedoch immer der Selbe.</p>
  <ol>
    <li>Fahrt vom Treffpunkt zum Startplatz (ca. 0,5 h)</li>
    <li>Aufbau des Ballons vor dem Start (ca. 0,5 h)</li>
    <li>Fahrt mit dem Heissluftballon (je nach Ihrer Wahl der Ballonfahrt )</li>
   <li>Verpacken des Ballons nach der Landung &nbsp;und Ballonfahrertaufe mit Champagner und persönlichem Zertifikat (ca. 0,5 h) </li>
   <li>kostenlose Rückfahrt vom Landeplatz zum Ausgangspunkt (ca. 0,5 h)</li>
 </ol>

</div>

我想做的是制作手风琴。 所以我向display : none中的所有ol, ul and p添加了.faq-section 所以我想知道点击h4时如何在下一个h4之前显示点击的h4之后的所有元素,以便显示下一个h4之前的所有元素。

5 个答案:

答案 0 :(得分:5)

如果您可以更改html标记,则可以将所有元素包装在div中,如下所示:

<h4>First</h4>
<div class='wrapper'>
 <p>Par</p>
 <ul>
   <li>list</li>
 </ul>
</div>
<h4>Second</h4>
.....

并切换.wrapper元素的可见性。

<强>的jQuery

如果您无法编辑标记,可以使用jquery nextUntil()函数:

$(document).on('click', 'h4', function() {
  $('ul, ol, p').removeClass('vis');
  $(this).nextUntil('h4').addClass('vis');
});
p,ul,ol { display:none }
p.vis,ul.vis,ol.vis { display:initial }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="faq-section">

  <h4>1. Wie reserviere ich mir einen Platz, wenn ich einen Gutschein habe?</h4>
  <p>Es gibt für Gutscheinbesitzer 2 Wege um sich einen Platz am Himmel bei uns zu reservieren.</p>
  <ul>
    <li>Sie können sich telefonisch  Mo-Fr 09.00-17.00 Uhr unter <strong>056 667 27 08 </strong>oder</li>
    <li>Sie nutzen unser elektronisches Reservationsformular, welches  Sie <a title="Reservation" href="34-0-Reservation.html"> hier </a>finden.</li>
  </ul>

  <h4>2. Wie lange dauert eine Ballonfahrt?</h4>
  <p>Je nach Angebot das Sie wählen hat eine Ballonfahrt unterschiedliche Dauer in der Luft. Der Ablauf VOR- und NACH-&nbsp; der Ballonfahrt ist jedoch immer der Selbe.</p>
  <ol>
    <li>Fahrt vom Treffpunkt zum Startplatz (ca. 0,5 h)</li>
    <li>Aufbau des Ballons vor dem Start (ca. 0,5 h)</li>
    <li>Fahrt mit dem Heissluftballon (je nach Ihrer Wahl der Ballonfahrt )</li>
   <li>Verpacken des Ballons nach der Landung &nbsp;und Ballonfahrertaufe mit Champagner und persönlichem Zertifikat (ca. 0,5 h) </li>
   <li>kostenlose Rückfahrt vom Landeplatz zum Ausgangspunkt (ca. 0,5 h)</li>
 </ol>

</div>

答案 1 :(得分:5)

在不更改标记的情况下,您可以使用nextUntil()函数:

CSS:

.faq-section>*:not(h4) {
    display: none;
}

的jQuery

$(function() {
    $('.faq-section h4').on('click', function() {
        $(this).nextUntil('h4').toggle();
    });
});

DEMO

答案 2 :(得分:3)

$("h4").click(function(){    
    $("p").hide();
    $("ul").hide();

    $(this).next("p").show();
    $(this).next("ul").show();
})

答案 3 :(得分:3)

你可以用这个

$(function(){ 
  $( "h4" ).on('click', function() {
    $(this).nextUntil( "h4" ).show();
  })
});

如需参考,请查看Reference

工作演示Demo

答案 4 :(得分:3)

你可以试试这个:

<div class="faq-section">
  <div class="accordion">
      <h4 class="accordion-header" style="cursor:pointer;">1. Wie reserviere ich mir einen Platz, wenn ich einen Gutschein habe?</h4>
      <div class="collapsible" style="display:none">
          <p>Es gibt für Gutscheinbesitzer 2 Wege um sich einen Platz am Himmel bei uns zu reservieren.</p>
          <ul>
            <li>Sie können sich telefonisch  Mo-Fr 09.00-17.00 Uhr unter <strong>056 667 27 08 </strong>oder</li>
            <li>Sie nutzen unser elektronisches Reservationsformular, welches  Sie <a title="Reservation" href="34-0-Reservation.html"> hier </a>finden.</li>
          </ul>
      </div>
  </div>
  <div class="accordion">
        <h4 class="accordion-header" style="cursor:pointer;">2. Wie lange dauert eine Ballonfahrt?</h4>
        <div class="collapsible" style="display:none">
          <p>Je nach Angebot das Sie wählen hat eine Ballonfahrt unterschiedliche Dauer in der Luft. Der Ablauf VOR- und NACH-&nbsp; der Ballonfahrt ist jedoch immer der Selbe.</p>
          <ol>
            <li>Fahrt vom Treffpunkt zum Startplatz (ca. 0,5 h)</li>
            <li>Aufbau des Ballons vor dem Start (ca. 0,5 h)</li>
            <li>Fahrt mit dem Heissluftballon (je nach Ihrer Wahl der Ballonfahrt )</li>
           <li>Verpacken des Ballons nach der Landung &nbsp;und Ballonfahrertaufe mit Champagner und persönlichem Zertifikat (ca. 0,5 h) </li>
           <li>kostenlose Rückfahrt vom Landeplatz zum Ausgangspunkt (ca. 0,5 h)</li>
         </ol>
        </div>
  </div>
</div>

<script>
    $(document).ready(function(){
        $(".accordion-header").click(function(){
            $(this).next().toggle();
        });
    });
</script>   

见这里的一个例子: https://jsfiddle.net/kyfus4Ld/