Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how can I select all elements between two elements

I want to select all elements between two given elements. I have html like this...

<h2>This is firsty</h2>
<p>Some para</p>
<ul>
  <li>list items</li>
  <li>list items</li>
  <li>list items</li>
  <li>list items</li>
  <li>list items</li>
</ul>
<h2>Secondy</h2>
<p>More text</p>

I want to select everything from the first h2 to the second h2, so I can wrap it in a div, ending up with all sections in their own wrapper.

like image 367
Billy Moon Avatar asked Oct 09 '12 07:10

Billy Moon


1 Answers

I'd suggest:

var elems = $('h2:first').nextUntil('h2');

Or, to perform the actual wrapping:

$('h2:first').nextUntil('h2').wrapAll('<div />');

More generically:

$('h2').each(
    function(i,e) {
        $(this)
            .nextUntil(this.tagName)
            .wrapAll('<div />');
    });​

JS Fiddle demo.

In order to include the starting element simply use andSelf() as part of the selector chain:

$('h2:first').nextUntil('h2').andSelf().wrapAll('<div />');

JS Fiddle demo.

References:

  • andSelf().
  • nextUntil().
  • wrapAll().
like image 166
David Thomas Avatar answered Nov 14 '22 23:11

David Thomas