Удалите все элементы с классом, пока не будет достигнут следующий элемент - PullRequest
0 голосов
/ 22 февраля 2012

У меня есть следующая структура HTML, (это не может измениться).

<!-- Comment 1 -->
<div class="ac_feed_item comments_v2_list" style="padding-left: 0px;"></div> <!-- Main Div -->
<div class="ac_feed_item comments_v2_list reply" style="padding-left: 20px;"></div> <!-- Reply Div -->
<div class="ac_feed_item comments_v2_list reply" style="padding-left: 40px;"></div> <!-- Reply Div -->
<div class="ac_feed_item comments_v2_list reply" style="padding-left: 60px;"></div> <!-- Reply Div -->

<!-- Comment 2 -->
<div class="ac_feed_item comments_v2_list" style="padding-left: 0px;"></div> <!-- Main Div -->
<div class="ac_feed_item comments_v2_list reply" style="padding-left: 20px;"></div> <!-- Reply Div -->
<div class="ac_feed_item comments_v2_list reply" style="padding-left: 40px;"></div> <!-- Reply Div -->

<!-- Comment 3 -->
<div class="ac_feed_item comments_v2_list" style="padding-left: 0px;"></div> <!-- Main Div -->
<div class="ac_feed_item comments_v2_list reply" style="padding-left: 20px;"></div> <!-- Reply Div -->

Я хотел бы удалить (через jQuery / Javascript) <div> Comment 2 и все его div-элементы «reply» (у него нет отношения родитель-потомок, каждый div сам по себе, поэтому я не могу использовать .children для пройти через DOM).

Но <div> Comment 3 должно остаться, как и <div> Comment 1.

Итак, я хочу удалить comment 2 и все его .reply (, которые не являются дочерними , они являются отдельными div ).

Я думал о том, чтобы использовать что-то вроде .next() с if() & .hasClass(), чтобы посмотреть, находимся ли мы в конце раздела комментария, который мы хотим удалить, но у меня возникли проблемы с этим.

1 Ответ

3 голосов
/ 22 февраля 2012

JQuery делает это довольно просто с помощью метода .nextUntil(). Документация здесь.

Пример включен в этот JSFiddle .

Код следующий:

// On click of a div which is not of class .reply
$('div.ac_feed_item.comments_v2_list:not(.reply)').click(function() {
    // Remove all divs after this, until a div that does not have `.reply` class
    $(this).nextUntil('div.ac_feed_item.comments_v2_list:not(.reply)').remove();
    // remove the main comment div
    $(this).remove();
});

* * 1013

...