jQuery trova e sostituisci stringa


86

Ho da qualche parte sul sito web un testo specifico, diciamo "lollypops", e voglio sostituire tutte le occorrenze di questa stringa con "marshmellows". Il problema è che non so dove sia esattamente il testo. So che potrei fare qualcosa del tipo:

$(body).html($(body).html().replace('lollypops', 'marshmellows'));

Probabilmente funzionerebbe, ma ho bisogno di riscrivere meno HTML possibile, quindi sto pensando qualcosa del tipo:

  1. cerca la stringa
  2. trova l'elemento genitore più vicino
  3. riscrive solo l'elemento genitore più vicino
  4. sostituiscilo anche negli attributi, ma non in tutti, ad esempio sostituiscilo in class, ma non insrc

Ad esempio, avrei una struttura come questa

<body>
    <div>
        <div>
            <p>
               <h1>
                 <a>lollypops</a>
               </h1>
            </p>
            <span>lollypops</span>
        </div>
    </div>
    <p>
       <span class="lollypops">Hello, World!</span>
       <img src="/lollypops.jpg" alt="Cool image" />
    </p>
<body>

In questo esempio, ogni occorrenza di "lecca lecca" verrebbe sostituita, <img src="...rimarrebbe la stessa e gli unici elementi che verrebbero effettivamente manipolati sarebbero <a>ed entrambi <span>.
Qualcuno sa come si fa questo?


C'è un ottimo plugin ben scritto per sostituire il testo. jquery-replacetext-plugin . Il plug-in sostituisce il testo lasciando intatti tutti i tag e gli attributi. Puoi anche trovare un bel tutorial per questo plug-in su spotlight-jquery-replacetext
Hussein

Risposte:


156

Potresti fare qualcosa del genere:

$("span, p").each(function() {
    var text = $(this).text();
    text = text.replace("lollypops", "marshmellows");
    $(this).text(text);
});

Sarà meglio contrassegnare tutti i tag con il testo che deve essere esaminato con un nome di classe adatto.

Inoltre, questo potrebbe avere problemi di prestazioni. jQuery o javascript in generale non sono veramente adatti per questo tipo di operazioni. È meglio farlo lato server.


Lo so, sfortunatamente non posso farlo sul lato server. Inoltre, la soluzione che hai suggerito non è adatta a me, poiché non so dove sarà esattamente la stringa. Potrebbe essere dentro <span>, potrebbe essere dentro <h4>e così via ...
cifra

Quindi potresti provare $ ("*"), ma non lo consiglierei.
kgiannakakis

14

Potresti fare qualcosa in questo modo:

$(document.body).find('*').each(function() {
    if($(this).hasClass('lollypops')){ //class replacing..many ways to do this :)
        $(this).removeClass('lollypops');
        $(this).addClass('marshmellows');
    }
    var tmp = $(this).children().remove(); //removing and saving children to a tmp obj
    var text = $(this).text(); //getting just current node text
    text = text.replace(/lollypops/g, "marshmellows"); //replacing every lollypops occurence with marshmellows
    $(this).text(text); //setting text
    $(this).append(tmp); //re-append 'foundlings'
});

esempio: http://jsfiddle.net/steweb/MhQZD/


7

Di seguito è riportato il codice che ho usato per sostituire del testo, con testo colorato. È semplice, prende il testo e lo sostituisce all'interno di un HTMLtag. Funziona per ogni parola in quel tag di classe.

$('.hightlight').each(function(){
    //highlight_words('going', this);
    var high = 'going';
    high = high.replace(/\W/g, '');
    var str = high.split(" ");
    var text = $(this).text();
    text = text.replace(str, "<span style='color: blue'>"+str+"</span>");
    $(this).html(text);
});

2
var string ='my string'
var new_string = string.replace('string','new string');
alert(string);
alert(new_string);

1
Penso che le virgolette attorno alla variabile stringa nella funzione "sostituisci" debbano essere rimosse.
Jason Glisson

0

Potresti fare qualcosa del genere:

HTML

<div class="element">
   <span>Hi, I am Murtaza</span>
</div>


jQuery

$(".element span").text(function(index, text) { 
    return text.replace('am', 'am not'); 
});

-3

Perché semplicemente non aggiungi una classe al contenitore di stringhe e quindi sostituisci il testo interno? Proprio come in questo esempio.

HTML:

<div>
    <div>
        <p>
           <h1>
             <a class="swapText">lollipops</a>
           </h1>
        </p>
        <span class="swapText">lollipops</span>
    </div>
</div>
<p>
   <span class="lollipops">Hello, World!</span>
   <img src="/lollipops.jpg" alt="Cool image" />
</p>

jQuery:

$(document).ready(function() {
    $('.swapText').text("marshmallows");
});

2
Questa è una domanda di 4 anni e ha già risposto, ma il problema era che non potevo fare quello che mi suggerisci.
cifra

Questa risposta ignora completamente la specifica dell'OP: "Voglio sostituire tutte le occorrenze di questa stringa ... Il problema è che non so dove sia esattamente il testo."
Luca
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.