2010-04-22 5 views
2

Je veux une fonction qui remplace chaque li par une image. Ceci est mon code:jQuery: Remplacer les chaînes par .each()

$(document).ready(function(){ 
    var tmphref; 
    var tmpname; 
    var str = '<a href="' + tmphref + '"><img src="http://www.somesite.com/a/' + tmpname[1] + '/avatar-small.jpg /></a>'; 
    $('#somediv li a').each(function(){ 
     tmphref = $(this).attr("href"); 
     tmpname = /http\:\/\/(\w+)\.somesite\.com\//.exec(tmphref); 
     $(this).parent().replaceWith(str); 
    }); 
}); 

L'image est dans ce chemin spécifique: www.somesite.com/a/username/avatar-small.jpg
Le code ne fonctionne pas ci-dessus. Des idées?

Merci d'avance.

Répondre

4

Déplacer

var str = '<a href="' + tmphref + '"><img src="http://www.somesite.com/a/' + tmpname[1] + '/avatar-small.jpg /></a>'; 

après tmphref et tmpname, comme celui-ci

$('#somediv li a').each(function(){ 
    tmphref = $(this).attr("href"); 
    tmpname = /http\:\/\/(\w+)\.somesite\.com\//.exec(tmphref); 
    var str = '<a href="' + tmphref + '"><img src="http://www.somesite.com/a/' + tmpname[1] + '/avatar-small.jpg /></a>'; 
    $(this).parent().replaceWith(str); 
}); 

car la variable str est des valeurs déjà attribuées avec undefinedtmphref et tmpname, changeant ainsi les valeurs de tmphref et tmpname après , n'affecterait pas la variable str

Et, pour ce cas, vous n'avez pas besoin de déclarer la variable pour tmphref et tmpname en dehors de la fonction .each.

+0

Exactement - vous définissez les deux variables _après_ que vous les utilisez. :) – Damovisa

+0

Cela m'est venu à l'esprit, mais n'est-ce pas déclarer une nouvelle variable pour chaque li? (il a le mot-clé var) – Warrantica

+0

Warrantica, votre 'tmphref' est basé sur la boucle de chaque, donc il est nécessaire de le faire à l'intérieur. – YOU