Try this: $(function() { $("div.accordion h3").each( function() { $(this).nextAll().wrapAll("<div class='accordionInner'></div>"); }); });
The problem was that "wrapAll" was wrapping up all the elements of all the accordion DIVs into one. Sidenote: The sample webpage was a bit messed up, it didn't have a head or body, the script tags where inside the body, and the jquery.js file wasn't actually present (404 error). I assume it's just some copy paste errors. Karl Rudd On 2/14/07, Nathan Young -X (natyoung - Artizen at Cisco) <[EMAIL PROTECTED]> wrote: > I posted my sample HTML here: > > http://ncyoung.com/temp/simplify.html > > > > .:||:._.:||:._.:||:._.:||:._.:||:._.:||:._.:||:._.:||:._.:||:._.:||:._.: > ||:. > > Nathan Young > Cisco.com->Interface Development > A: ncy1717 > E: [EMAIL PROTECTED] > > > -----Original Message----- > > From: [EMAIL PROTECTED] > > [mailto:[EMAIL PROTECTED] On Behalf Of Nathan Young > > -X (natyoung - Artizen at Cisco) > > Sent: Tuesday, February 13, 2007 10:55 AM > > To: jQuery Discussion. > > Subject: Re: [jQuery] wrapping or cloning problem > > > > Hi John. > > > > Thanks for taking a stab at this! Your solution does fit my problem > > statement, and I agree it's a clever approach. > > > > I grabbed the function you sent and I got wrapall from the > > URL you sent. > > > > I'm not getting good behavior overall from it and I'm new enough to > > jQuery that I can't tell where the problem lies... probably between my > > eyes and keyboard :) > > > > I'm attaching an HTML file with my attempt (and some commented out > > cruft), and I hope it makes it through the mailer. If it > > doesn't let me > > know and I'll find somewhere to post it. > > > > Also I can't help thinking that preparing the right "each" callback > > function could let me do this with core jQuery and avoid writing > > extension functions. > > > > I'm encountering something a little strange with each > > functions though. > > This works fine: > > > > $("[EMAIL PROTECTED]").each(function(i){$(this).prepend("h > > ey!");)}); > > > > I get a "hey" inside and at the start of each accordion div. > > > > When I add this line: > > > > $("[EMAIL PROTECTED]").each(function(i){$(this).prepend("h > > ey!");$(th > > is).prepend($(this).children("div/h3").clone())}); > > > > Not only does the second thing not work (and I've racked my brains > > trying a variety of constructions there), but I stop getting > > consistent > > "hey"'s in the right places. > > > > ---------->Nathan > > > > > > .:||:._.:||:._.:||:._.:||:._.:||:._.:||:._.:||:._.:||:._.:||:. > > _.:||:._.: > > ||:. > > > > Nathan Young > > Cisco.com->Interface Development > > A: ncy1717 > > E: [EMAIL PROTECTED] > > > > > -----Original Message----- > > > From: [EMAIL PROTECTED] > > > [mailto:[EMAIL PROTECTED] On Behalf Of John Resig > > > Sent: Monday, February 12, 2007 11:32 PM > > > To: jQuery Discussion. > > > Subject: Re: [jQuery] wrapping or cloning problem > > > > > > Hi Nathan - > > > > > > I'll take a stab at it! > > > > > > A while back I wrote a nifty little pair of plugins: > > > http://john.jquery.com/jquery/test/nextuntil.html > > > > > > .nextUntil() and .wrapAll(). wrapAll is perfect for you, > > > unfortunately, nextUntil won't do the trick - you need a .nextAll() > > > > > > So here's a .nextAll: > > > > > > $.fn.nextAll = function() { > > > var match = []; > > > > > > // We need to figure out which elements to push onto the array > > > this.each(function(){ > > > // Traverse through the sibling nodes > > > for( var i = this.nextSibling; i; i = i.nextSibling ) { > > > // Make sure that we're only dealing with elements > > > if ( i.nodeType != 1 ) continue; > > > > > > // Otherwise, add it on to the stack > > > match.push( i ); > > > } > > > }); > > > > > > return this.pushStack( match ); > > > }; > > > > > > And now we can do this: > > > $("div.accoridan h3").nextAll().wrapAll("<div > > > class='accordianInner'></div>"); > > > > > > I think that's a pretty nifty solution :-) Let me know if > > you want me > > > to setup a demo. > > > > > > --John > > > > > > On 2/12/07, Nathan Young -X (natyoung - Artizen at Cisco) > > > <[EMAIL PROTECTED]> wrote: > > > > Hi All. > > > > > > > > I want to accordion an existing content format, and I think > > > that I need > > > > to insert a wrapper element. First I would love a sanity > > > check on my > > > > general approach then maybe someone can critique the > > > manipulation I'm > > > > trying. > > > > > > > > Here's my content: > > > > > > > > <div class="accordion"> > > > > <h3>heading</h3> > > > > <arbitrary content/> > > > > </div> > > > > > > > > I can't change the content and I need the heading to be > > used as the > > > > clickable bar. > > > > > > > > The approach I want to take (on a high level) is: > > > > - put a div around everything after the h3 in the dives classed > > > > "accordion" > > > > - put events on the h3 to show the associated div and hide the > > > > non-associated divs > > > > > > > > The js I would use is something like: > > > > > > > > > > > $("[EMAIL PROTECTED]").removeClass("accordion").addClass(" > > > accordionI > > > > nner"); > > > > $("[EMAIL PROTECTED]").wrap('<div > > > class="accordion"></div>'); > > > > > > > > //no luck here: > > > > > > > $("div:[EMAIL PROTECTED]").each(function(i){$(this).prepend($ > > > (this).chi > > > > ldren("[EMAIL PROTECTED]:firstChild)}) > > > > > > > > //nor with this: > > > > > > > $("[EMAIL PROTECTED]").each(function(i){$(this).children(" > > > [EMAIL PROTECTED] > > > > =accordionInner]:first-child").clone().prependTo(this)}) > > > > > > > > > > > > All suggestions welcome! > > > > > > > > ----------->Nathan > > > > > > > > > > > > > > > > > > > .:||:._.:||:._.:||:._.:||:._.:||:._.:||:._.:||:._.:||:._.:||:. > > > _.:||:._.: > > > > ||:. > > > > > > > > Nathan Young > > > > Cisco.com->Interface Development > > > > A: ncy1717 > > > > E: [EMAIL PROTECTED] > > > > > > > > _______________________________________________ > > > > jQuery mailing list > > > > discuss@jquery.com > > > > http://jquery.com/discuss/ > > > > > > > > > > _______________________________________________ > > > jQuery mailing list > > > discuss@jquery.com > > > http://jquery.com/discuss/ > > > > > > > _______________________________________________ > > jQuery mailing list > > discuss@jquery.com > > http://jquery.com/discuss/ > > > > _______________________________________________ > jQuery mailing list > discuss@jquery.com > http://jquery.com/discuss/ > _______________________________________________ jQuery mailing list discuss@jquery.com http://jquery.com/discuss/