2014-04-03 23 views
5

Ho bisogno di sostituire un carattere specifico per tutti gli elementi la cui classe è la stessa con jQuery. Considerate questo codice html:Come sostituire lo stesso carattere più volte?

<div class="product-name"> 
    <h1>Apple®</h1> 
</div> 

<div class="product-name"> 
    <h2>iPhone®</h2> 
</div> 

<div class="product-name"> 
    <h3>iPhone 5S®</h3> 
</div> 

ho bisogno di sostituire tutto il ® charactesr con tag apice con questo codice:

$('.product-name').html(
    $('.product-name').html().replace(/®/gi, '<sup>&reg;</sup>') 
); 

Tuttavia, questo codice sostituirà solo la prima occorrenza. Per la seconda e oltre occorrenze, sostituirà l'intero nome del prodotto con il nome del primo prodotto, compresi i tag h1.

Come posso sostituire solo i caratteri ® senza modificare gli altri caratteri e le etichette?

risposta

4

È possibile utilizzare il callback in html() per restituire il valore di ogni elemento della collezione

$('.product-name').html(function(_, html) { 
    return html.replace(/®/gi, '<sup>&reg;</sup>') 
}); 

FIDDLE

+0

+1 per l'uso di 'g' per sostituire tutto. Abbastanza sicuro che l'opzione 'i' sia ridondante su questo :) –

+0

(Ironia della sorte, l'uso della richiamata elimina i problemi sull'input corrente, anche senza' g' ..) – user2864740

+0

@ user2864740 - Sì, se c'è solo uno di quei caratteri in ogni elemento, la regex non sarebbe affatto necessaria. – adeneo

1

Prova $('.product-name').html().split("®").join('<sup>&reg;</sup>');

Per una risposta più completa,

var body = $("body").html().split('®').join('<sup>&reg;</sup>'); 
$("body").html(body); 

JS Fiddle

+1

+1: uso intelligente di split/join. Essere interessante vedere come la velocità si confronta con l'approccio regex. –

+0

Questo metodo dovrebbe essere all'interno di un '.each()' – Mottie

+1

Sì, deve essere in un 'each' (e in effetti memorizza il risultato negli elementi html), ma questa sembra essere solo la parte interna del problema. @Christopher Bales: potresti voler completare questa risposta. –

Problemi correlati