折叠所有后续元素,直到特定标记

时间:2013-09-20 19:18:03

标签: javascript jquery css markup

我有一个带有升级标记的常见问题解答,如下所示:

<p><strong>How can I come see the animals perform?</strong><br>
Schedules and information about attending a performance can be found here:</p>
<p><a href="http://jupmingdolphins.com">Performance tickets</a></p>
<p>If no performances are listed, it means that none are scheduled in the
near future. The animals take a break between November and May.</p>

<p><strong>What's the answer to this question?</strong><br>
It's 42, of course.</p>

<h2>Header for More Questions</h2>

<p><strong>Is it true the dolphins have smartphones?</strong><br>
Yes, they use Android phones and text each other constantly.</p>
<p><b>Just kidding!</b> They are all Apple fan-fish and prefer iPhones.</p>

(etc)

我想弄明白:

  1. 一些CSS(可能还有jQuery)在页面加载时隐藏除问题之外的所有内容。

  2. 简单的jQuery,当用户点击<strong> - 包裹的问题时,答案会向下滑动并显示在其下方。问题是,正如你所看到的那样,标记是古怪的(归功于CMS)并且在一个问题和另一个问题之间可能有很多东西。答案不包含在他们自己的DIV或任何东西中。最重要的是,FAQ中有H2小标题,我不希望H2被触及/折叠。

  3. 所以我需要类似于点击操作的代码:

    $('strong').click(function() {
       // hide or reveal all elements from $(this) down,
       // and stop when we hit next <strong> or <h2>
    });
    

1 个答案:

答案 0 :(得分:2)

修改

由于问题甚至没有自己的标签,因此非常复杂。因此,您处于需要隐藏问题的父标记的尴尬境地,但显示问题本身,这基本上是不可能的。

为了解决这个问题,here is a hack我把它放在了一起。它克隆问题并将它们添加到自己的标记中。但是,我建议尝试优先考虑这个标记的作者,将其修改为更合理的东西。


要隐藏非问题,您似乎可以使用以下内容:

$("#container").children().not($("strong").parent()).not("p").hide();

要显示答案,您可以使用nextUntil

$(this).parent().nextUntil($("strong").parent()).show();

<强> FIDDLE