2010-06-16 6 views
2

est ici html:lien de mise à jour jQuery

<a href="http://site.com/any/different/folders/picture_name.jpg">Go and win</a> 
<a href="http://site.com/not/similar/links/some_other_name.png">Go and win</a> 

Comment ajouter un texte après la dernière "/" dans href attribut (avant picture_name.jpg) de chaque lien?

Le script devrait donner quelque chose comme:

<a href="http://site.com/any/different/folders/user_picture_name.jpg">Go and win</a> 
<a href="http://site.com/not/similar/links/user_some_other_name.png">Go and win</a> 

Ici user_ est ajouté.

Chaque lien est var img_link

Il peut y avoir une longueur de la liaison.

+0

oui, des liens peuvent être différents – Happy

+0

c'est pourquoi nous cherchons le dernier "/" – Happy

+0

Faites défiler un peu si vous voulez une version d'expression non régulière . ; o) – user113716

Répondre

2

Nice et propre. Pas de fractionnement, pas de tableaux, pas d'expressions régulières. : O)

test ici:http://jsfiddle.net/Pjdtm/

var index = img_link.lastIndexOf('/') + 1; 

     // "result" now stores the new href. 
    var result = img_link.substr(0,index) + 'user_' + img_link.substr(index); 
+0

+1 pour cet outil génial De plus, je crois que c'est l'implémentation la plus efficace, vous pouvez changer votre sélection de jQuery en '$ ('a [href]')', pour vous débarrasser de certains cas de bords bizarres – Senseful

+0

@eagle - Vous voulez dire jsFiddle ? Oui, c'est génial.: O) – user113716

+0

@eagle - N'a pas vu votre édition. Oui, le sélecteur est assez générique. Je ne sais pas si c'est plus efficace (3 appels de fonction), mais c'est un peu plus joli que regex. Avec le dernier commentaire de Happy dans votre réponse, je ne suis pas sûr que nous soyons sur la bonne voie. – user113716

3

Donc je pense que la meilleure solution utiliserait splice et rejoindre.

jQuery Exemple

$("a").each(function(){ 
var arr = $(this).attr("href").split("/") 
arr[arr.length-1] = "_user" + arr[arr.length-1]; 
$(this).attr("href",arr.join("/")); 
}); 
+0

Possible, mais il existe des méthodes regex pures qui sont probablement beaucoup plus rapides (et plus courtes).Ce code est plus facile à comprendre, cependant. – MvanGeest

+0

Je trouve une solution simple regex plus facile à comprendre, mais c'est probablement juste moi. – Senseful

+0

href déjà placé dans "var img_link" – Happy

7

Cette solution utilise regular expressions qui sont excellents à une simple manipulation de chaîne telle que celle-ci:

$('a[href]').each(function() { 
    var img_link = $(this).attr('href'); 
    $(this).attr('href', img_link.replace(/([^\/]+)$/, "user_$1")); 
}); 

Mise à jour utiliser img_link comme demandé par OP.

Si vous avez déjà la variable img_link et votre propre boucle each(), il suffit d'utiliser une ligne dans la fonction, i.e. .:

$(this).attr('href', img_link.replace(/([^\/]+)$/, "user_$1")); 
+0

bien, meilleure réponse que le mien pour sûr – Shawn

+0

+1 Avait presque fini d'écrire quelque chose de très similaire. – MvanGeest

+0

href déjà placé dans "var img_link", pouvez-vous ajouter du code pour cela? – Happy

1

est ici une façon. Utilisez l'expression rationnelle suivante sur l'attribut href:

(http://.+/(?=.+"))(.+) 

Cela correspondra http://site.com/not/similar/links/ et folders/user_picture_name.jpg séparément. Vous pouvez ensuite combiner les deux correspondances avec le texte ajouté au milieu.

1

Vous pouvez obtenir l'attribut par var hrefText = jQuery('a').attr('href'); vous pouvez modifier le hrefText comme:

hrefText = hrefText.substr(0,hrefText.lastIndexOf('/'))+'user_'+hrefText.substr(hrefText.lastIndexOf('/')),hrefText.length); //do this in each statement puis définissez l'attribut à nouveau.

jQuery('a').attr(hrefText);

Cela dit que si vous avez nombre de liens que vous ne devriez pas aller pour une approche javascript

Questions connexes