2010-12-07 3 views
0

J'ai donc écrit le code suivant pour parcourir chaque ancre, c'est href, et s'il contient l'ancienne adresse, essayez de remplacer l'ancienne par la nouvelle. Bien qu'il y ait évidemment un problème bien avant ce code avec le site, j'ai besoin d'une solution rapide et sale à ce problème, donc ce code est ce que je vais faire. Par conséquent, le code ci-dessous ne fonctionne pas. .Replace nécessite apparemment une correspondance complète, donc il trouverait "foo" dans la phrase "foo is good" mais pas "foo" dans "fooIsGood".Remplacer un petit segment d'une chaîne plus grande

$('a').each(function() { 
    var addressSwitch = $(this).attr("href"); 
    if (addressSwitch){ 
     var test = addressSwitch.indexOf("http://www.oldaddress.com"); 
     if (test == 0){ 
      addressSwitch.replace("http://www.oldaddress.com/", "www.newaddress.com"); 
      $(this).attr("href" , addressSwitch); 
      } 
     } 
}); 

Alors, qu'est-ce qui fonctionnerait?

Merci d'avance!

+0

Hmm ... ' – matthewpavkov

+0

vous avez besoin d'un motif regex mattching c'est, donnez-moi quelques minutes, je vais poster..une logique – kobe

+0

cherchez-vous une autre chaîne de remplacer en dehors du formulaire que vous avez donné ... ou c'est juste le dessus ?? – kobe

Répondre

0

les changer à la fois en minuscules pour le comparer, puis utilisez newvalue + sous-chaîne de la longueur de la newvalue et en avant. par exemple. Hmm ... `replace()` devrait correspondre à cela correctement.

$('a').each(function() { 
    var replacer = "http://www.oldaddress.com"; 
    var addressSwitch = $(this).attr("href"); 
    if (addressSwitch){ 
     var test = addressSwitch.toLowerCase().indexOf(replacer); 
     if (test == 0){ 
      addressSwitch = replacer + addressSwitch.subString(replacer.length); 
      $(this).attr("href" , addressSwitch); 
      } 
     } 
}); 
2

.replace() fonctionne correctement, mais vous n'êtes pas attribuer la valeur remplacée, il doit être:

addressSwitch = addressSwitch.replace("http://www.oldaddress.com/", "www.newaddress.com"); 

Rappelez-vous que .replace() ne change pas la chaîne d'origine, il retourne une nouvelle avec la valeur remplacée.

Rappelez-vous que .attr() prend également une fonction, vous pouvez donc mince votre code à ceci:

$('a[href^="http://www.oldaddress.com"]').attr("href", function(i, href) { 
    return href.replace("http://www.oldaddress.com/", "www.newaddress.com"); 
}); 
+1

VOUS ÊTES UNE MACHINE. JE REFUSE DE CROIRE QUE VOUS ÊTES HUMAIN. xD –

+0

@Jacob - CraverBot v1.33.6 (pas encore parfait) est occupé en ce moment, puis-je prendre un message? –

+0

@CraverBot - Bien sûr, demandez à Nick s'il peut vous fermer - son bot vole tout mon représentant! ;-) –

Questions connexes