2010-10-06 21 views
3

J'essaie d'entourer dynamiquement des ensembles de balises IMG et A avec une balise div mais je n'arrive pas à le faire fonctionner.jQuery insérant l'élément .before() et .after() ne fonctionne pas comme prévu, qu'est-ce que je fais mal?

mon html:

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

mon script:

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

mes résultats Firebug:

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

Ce que je suis en train d'accomplir:

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

Je remplacé

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

avec

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

juste pour voir si elle était incapable d'exécuter .next(). Après() le code, mais il fonctionne très bien. Je suis nouveau à l'utilisation de jQuery et ne peux pas comprendre ce que je fais mal. Quelqu'un peut-il aider? S'il vous plaît.

Répondre

3

Vous pouvez utiliser .wrapAll(), comme ceci:

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

You can test it out here, cela prend <img> et <a> puis enveloppe fois dans ce conteneur <div>.

+0

jQuery est très sémantique. Je suis impressionné que vous pouvez écrire du code comme ça avec ça. (J'essaie de m'éloigner du prototype vers jQuery.) –

+0

WOW! Cela fonctionne très bien! Merci beaucoup. Comment trouvez-vous qu'il y a (et peut utiliser des choses comme) .andSelf(). WrapAll (...)? – Angie

+0

@Angie - Le site API a toutes les méthodes et à quoi elles servent :) http://api.jquery.com/ Vous apprenez en ayant besoin/de les trouver je suppose, c'est comme ça que je vais quand même :) –

1

Vous pouvez également vous débarrasser de l'each() (ou tout simplement le remplacer par votre sélection dans l'extrait de Nick):

$('img.myClass-1').next().andSelf().wrapAll('<div style="position: relative;" />'); 
+0

Oui, merci. – Angie