2010-10-19 15 views
5

Questo è il mio codice finora:Come sostituire più di una volta?

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

questo funziona solo una volta, ma deve lavorare per tutti quei "|" ...

tutte le idee?

+1

Nota che replace() è una chiamata javascript e non fa parte di jQuery – slolife

risposta

14

Aggiungere /g modificatore:

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

Ulteriori informazioni:

Il g modificatore viene utilizzato per eseguire una corrispondenza globale (trovate tutte le partite, piuttosto che fermarsi dopo il primo match) .

+2

'replace (/ \ |/g, '
')', più correttamente. –

+0

@Chris: aggiornato grazie :) – Sarfraz

+0

il "più correttamente" funziona! Devo imparare le espressioni regolari, compagni. – Thomas

0

Hi aggiungere un modificatore al vostro regex aggiungendo il "/ g" dopo "|"

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

È necessario utilizzare un regex letterale. JavaScript non trasforma le stringhe in letterali regex al volo. – BoltClock

2

Se si utilizza jQuery 1.4, è possibile farlo più bene usando la firma .html(function)):

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

Questo significa che non c'è bisogno di creare una seconda istanza jQuery e dovrebbe funzionare meglio.

+0

+1: utile; Non avevo saputo di questa invocazione di .html() prima. Buona chiamata! –

+0

Bella soluzione, e quando si ignora la seconda parentesi ".replace (...))" funziona come un incantesimo. grazie. – Thomas

+0

Risolto, grazie .. – lonesomeday

Problemi correlati