0

コードで直接説明しましょう。

私は持っている:

<dl class="ctx accordion">
   <dt>headline<a>x</a></dt>
   <dd><!----></dd>
</dl>
<p class="ctx">Lorem ipsum dolor sit amet, consetetur sadipscing elitr</p>
<p class="ctx">Lorem ipsum dolor sit amet, consetetur sadipscing elitr</p>
<p class="ctx">Lorem ipsum dolor sit amet, consetetur sadipscing elitr</p>

<dl class="ctx accordion">
   <dt>headline<a>x</a></dt>
   <dd><!----></dd>
</dl>
<p class="ctx">Lorem ipsum dolor sit amet, consetetur sadipscing elitr</p>

<dl class="ctx accordion">
   <dt>headline<a>x</a></dt>
   <dd><!----></dd>
</dl>
<p class="ctx">Lorem ipsum dolor sit amet, consetetur sadipscing elitr</p>
<p class="ctx">Lorem ipsum dolor sit amet, consetetur sadipscing elitr</p>

そして、すべての .ctx:not('.accordion') が前の .accordion dd などに入ることを達成したい

これが私の試みです:

     $('.accordion').each(function(index) {

     var nextCTX = $(this).nextAll('.ctx').not('.accordion');
     $(this).find('dd').append(nextCTX);
 });

しかし、それはうまくいきません。この例では、すべてを .ctx でキャッチし、最初の .accordion dd に入れます

どうしたの?

#

編集

アコーディオン ループを停止するソリューションが必要です。私の現在は次のようになります: $('.accordion dd').append(function() { return $(this).closest('.accordion').nextUntil('.accordion').filter('.ctx:not( ".stopLast")'); });

この場合、ループは .stopLast を使用して elem の後にすべてを含めることを停止できません

4

4 に答える 4

2

追加したい要素をターゲットにしてp.ctx、次の要素まで一致するすべての要素を見つけます。.accordion

エレメント :

$('.accordion dd').append(function() {
    return $(this).closest('.accordion').nextUntil('.accordion').filter('p.ctx');
});

フィドル

于 2013-09-24T15:35:26.650 に答える
1

.accordion 要素が常に .ctx:not('.accordion') の兄弟であると仮定すると、次を使用できます。

$('.ctx.accordion').each(function () {
    var $this = $(this),
        $elemsToMove = $this.nextUntil('.accordian', '.ctx');

    $this.find('dd').append($elemsToMove);
});

http://jsfiddle.net/BYossarian/phDdz/

于 2013-09-24T15:38:48.627 に答える