Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQuery inserting element .before() and .after() does not work as expected, what am I doing wrong?

I am trying to dynamically surround sets of IMG and A tags with a div tag but am unable to make it work.

my html:

<img class="myClass-1" src="img5" />
<a class="myClass-2" href="url"></a>  

my script:

$('img.myClass-1').each(function(){
   $(this).before('<div style="position: relative;">');
   $(this).next().after('</div>');
});  

my Firebug outcome:

<div style="position: relative;"/>
<img class="myClass-1" src="img5" />
<a class="myClass-2" href="url"></a>  

What I am trying to accomplish:

<div style="position: relative;">
<img class="myClass-1" src="img5" />
<a class="myClass-2" href="url"></a>
</div>  

I replaced

$(this).next().after('</div>');  

with

$(this).next().after('<p>test</p>');  

just to see if it was unable to execute the .next().after() code but it works fine. I am new to using jQuery and can't figure out what I'm doing wrong. Can somebody help? Please.

like image 251
Angie Avatar asked Jan 27 '26 06:01

Angie


2 Answers

You can use .wrapAll(), like this:

$(this).next().andSelf().wrapAll('<div style="position: relative;" />');

You can test it out here, this takes <img> and <a> then wraps them both in that <div> container.

like image 102
Nick Craver Avatar answered Jan 29 '26 19:01

Nick Craver


You could also get rid of the each() (or just replace this with your selector in Nick's snippet):

$('img.myClass-1').next().andSelf().wrapAll('<div style="position: relative;" />');
like image 20
Alex Heyd Avatar answered Jan 29 '26 21:01

Alex Heyd