Свернуть все последующие элементы до определенного тега

0

У меня есть FAQ с развороченной разметкой, которая выглядит так:

<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 the answer to this question?</strong><br>
It 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> -wrapped, ответ скользит вниз и появляется под ним. Проблема, как вы можете видеть, в том, что разметка неаккуратная (благодаря CMS), и между одним вопросом и другим может быть много материала. Ответы не завернуты в их собственный DIV или что-то еще. Кроме всего прочего, во всех часто задаваемых вопросах есть подзаголовки H2, и я не хочу, чтобы H2s когда-либо касались/рушились.

Поэтому мне нужен код вроде как для действия click:

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

1 ответ

2
Лучший ответ

редактировать

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

Чтобы обойти эту проблему, вот взлом, который я собрал. Он клонирует вопросы и добавляет их в свой тег. Но я бы рекомендовал попытаться превзойти авторов этой разметки, чтобы пересмотреть ее во что-то более рациональное.


Чтобы скрыть не-вопросы, похоже, вы могли бы использовать что-то вроде:

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

Чтобы показать ответ, вы, вероятно, можете использовать nextUntil:

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

FIDDLE

  • 0
    Вы должны нацелить p теги (это легко сделать), чтобы любые h2 были затронуты.
  • 0
    @MarcAudet вы правы ... трудно дать полный ответ на вопрос, так как он выглядит неполным. (с какими другими шаблонами разметки должен иметь дело Оператор?)
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню