Reputation: 103
Let me explain it direct in code:
I have:
<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>
And i want to accomblish that all .ctx:not('.accordion') go into the prev .accordion dd and so on
Here is my try:
$('.accordion').each(function(index) {
var nextCTX = $(this).nextAll('.ctx').not('.accordion');
$(this).find('dd').append(nextCTX);
});
But it dont work well. In this example i catch everything with .ctx and put it into the first .accordion dd
whats wrong?
#EDIT
i need a solution to stop the accordion loop. my current looks like: $('.accordion dd').append(function() { return $(this).closest('.accordion').nextUntil('.accordion').filter('.ctx:not(".stopLast")'); });
in this case the loop cant stop an include everything after a elem with .stopLast
Upvotes: 0
Views: 80
Reputation: 11932
Assuming that the .accordion elements will always be siblings of .ctx:not('.accordion'), then you can use:
$('.ctx.accordion').each(function () {
var $this = $(this),
$elemsToMove = $this.nextUntil('.accordian', '.ctx');
$this.find('dd').append($elemsToMove);
});
http://jsfiddle.net/BYossarian/phDdz/
Upvotes: 1
Reputation: 318222
Target the elements that you wish to append to, and then find all elements that match p.ctx
until the next .accordion
element :
$('.accordion dd').append(function() {
return $(this).closest('.accordion').nextUntil('.accordion').filter('p.ctx');
});
Upvotes: 2
Reputation: 57095
Try .nextUntil()
$('.accordion').each(function (index) {
var nextCTX = $(this).nextUntil('.accordion').filter('.ctx');
$(this).find('dd').append(nextCMP);
});
Upvotes: 1