jQuery menemukan dan mengganti string


86

Saya memiliki suatu tempat di situs web teks tertentu, katakanlah "lollypops", dan saya ingin mengganti semua kemunculan string ini dengan "marshmellows". Masalahnya adalah saya tidak tahu di mana tepatnya teks itu. Saya tahu saya bisa melakukan sesuatu seperti:

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

Ini mungkin akan berhasil, tetapi saya perlu menulis ulang HTML sesedikit mungkin, jadi saya memikirkan sesuatu seperti:

  1. cari stringnya
  2. temukan elemen induk terdekat
  3. tulis ulang hanya elemen induk terdekat
  4. ganti ini bahkan di atribut, tapi tidak semua, misalnya ganti di class, tapi tidak disrc

Sebagai contoh, saya akan memiliki struktur seperti ini

<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>

Dalam contoh ini, setiap terjadinya "lollypops" akan diganti, hanya <img src="...akan menjadi satu-satunya elemen yang akan benar-benar dimanipulasi akan sama dan <a>dan kedua <span>s.
Apakah ada yang tahu bagaimana melakukan ini?


Ada plugin yang ditulis dengan baik untuk mengganti teks. jquery-replacetext-plugin . Pengaya menggantikan teks yang membiarkan semua tag dan atribut tidak tersentuh. Anda juga dapat menemukan tutorial yang bagus untuk plug-in ini di spotlight-jquery-replacetext
Hussein

Jawaban:


155

Anda bisa melakukan sesuatu seperti ini:

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

Akan lebih baik jika menandai semua tag dengan teks yang perlu diperiksa dengan nama kelas yang sesuai.

Juga, ini mungkin memiliki masalah kinerja. jQuery atau javascript secara umum tidak terlalu cocok untuk operasi semacam ini. Anda lebih baik melakukannya di sisi server.


Saya tahu, sayangnya saya tidak dapat melakukan ini di sisi server. Selain itu, solusi yang Anda sarankan tidak sesuai untuk saya, karena saya tidak tahu persis di mana letak stringnya. Mungkin di <span>, mungkin di <h4>dan seterusnya ...
cypher

Kemudian Anda dapat mencoba $ ("*"), tetapi saya tidak akan merekomendasikannya.
kgiannakakis

14

Anda bisa melakukan sesuatu dengan cara ini:

$(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'
});

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


7

Di bawah ini adalah kode yang saya gunakan untuk mengganti beberapa teks, dengan teks berwarna. Sederhana saja, ambil teksnya dan ganti di dalam HTMLtag. Ini berfungsi untuk setiap kata di tag kelas itu.

$('.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
Saya pikir tanda kutip di sekitar variabel string dalam fungsi 'ganti' perlu dihapus.
Jason Glisson

0

Anda bisa melakukan sesuatu seperti ini:

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

Mengapa Anda tidak menambahkan kelas ke wadah string dan kemudian mengganti teks bagian dalam? Seperti contoh ini.

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
Ini adalah anak berusia 4 tahun dan sudah menjawab pertanyaan, tetapi masalahnya adalah saya tidak bisa melakukan apa yang Anda sarankan.
cypher

Jawaban ini sepenuhnya mengabaikan spesifikasi OP: "Saya ingin mengganti semua kemunculan string ini ... Masalahnya adalah saya tidak tahu di mana tepatnya teks itu."
Lukas
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.