2010-10-19 13 views
5

Ceci est mon code à ce jour:Comment remplacer plus d'une fois?

$("h1.intro:contains('|')").each(function() { 
    $(this).html($(this).html().replace('|','</span><br /><span>')) 
}); 

Cela fonctionne juste une fois, mais il doit travailler pour tous ces « | » ...

des idées?

+1

Notez que remplacer() est un appel javascript et ne fait pas partie de jQuery – slolife

Répondre

14

Ajouter modificateur /g:

$("h1.intro:contains('|')").each(function() { 
    $(this).html($(this).html().replace(/\|/g, '</span><br /><span>')); 
}); 

Plus d'info:

Le modificateur g est utilisé pour effectuer une correspondance globale (trouver tous les matchs plutôt que d'arrêter après le premier match) .

+2

'remplacer (/ \ |/g, '
')', plus correctement. –

+0

@Chris: Mis à jour merci :) – Sarfraz

+0

le 'plus correctement' fonctionne! Je dois apprendre des expressions régulières, thx mates. – Thomas

0

Salut ajouter un modificateur à votre regex en ajoutant le "/ g" après "|"

$("h1.intro:contains('|')").each(function() { 
    $(this).html($(this).html().replace("|/g",'</span><br /><span>')) 
}); 
+1

Vous devez utiliser un littéral regex. JavaScript ne transforme pas les chaînes en littéraux regex à la volée. – BoltClock

2

Si vous utilisez jQuery 1.4, vous pouvez le faire en utilisant plus bien la signature .html(function)):

$("h1.intro:contains('|')").each(function() { 
    $(this).html(function(idx, oldContent) { 
     return oldContent.replace(/\|/g, '</span><br /><span>'); 
    }); 
}); 

Cela signifie que vous ne devez pas créer une deuxième instance jQuery et devrait mieux performer.

+0

+1: Utile; Je n'avais pas connu cette invocation de .html() auparavant. Bon appel! –

+0

Belle solution, et quand ignorer la deuxième parenthèse ".replace (...))" il fonctionne comme un charme. Je vous remercie. – Thomas

+0

Correction, merci .. – lonesomeday