Ganti kata-kata di teks tubuh

94

Apakah ada cara untuk mengganti teks normal dalam elemen tabel yang ditempatkan di dalam tubuh HTML?

Suka mengganti "halo" dengan "hai"?

Harap hanya gunakan JavaScript tanpa jQuery .

Wahtever
sumber
Bisakah Anda lebih spesifik? Apa yang ingin Anda ganti, di mana di dalam tubuh, dll.
Zirak
tubuh memiliki div dan di dalamnya ada tabel, maka saya ingin mengganti beberapa teks normal bukan kode seperti mengganti ("halo") dengan ("hi")
Wahtever
3
kebanyakan solusi di bawah ini akan menghancurkan semua event dan seluruh struktur dom jika kata yang diganti kebetulan menjadi nama kelas, nama tag atau apapun di html
Muhammad Umer
Sepertinya pertanyaan dan jawaban salah. Ini menanyakan bagaimana cara mengganti kata dan bukan karakter. Seperti penggantian ini hello, this is a text randomTexthelloseharusnya hi, this is a text randomTexthello. Namun, semua jawaban lain di sini menggantikan karakter, bukan kata.
Orhun Alp Oral

Jawaban:

139

Untuk mengganti string di HTML Anda dengan yang lain, gunakan metode replace di innerHTML :

document.body.innerHTML = document.body.innerHTML.replace('hello', 'hi');

Perhatikan bahwa ini akan menggantikan contoh pertama di helloseluruh isi, termasuk semua contoh dalam kode HTML Anda (mis. Nama kelas dll ..), jadi gunakan dengan hati-hati - untuk hasil yang lebih baik, coba batasi ruang lingkup penggantian dengan menargetkan kode Anda menggunakan document.getElementById atau serupa.

Untuk mengganti semua contoh string target, gunakan ekspresi reguler sederhana dengan gbendera lobal:

document.body.innerHTML = document.body.innerHTML.replace(/hello/g, 'hi');
Dexter
sumber
1
tidak berhasil untuk saya di sini adalah apa yang saya gunakan <script type="text/javascript"> window.onload = clear(); function clear() { document.body.innerHTML = document.body.replace('ü', 'n'); } </script>
Wahtever
Ini bisa lebih rumit dengan karakter yang diperluas - di dalam pengkodean apa dokumen Anda? Apakah Anda yakin bahwa karakter tersebut adalah ü, dan bukan & # 252; sebagai contoh..?
Dexter
2
Anda tidak menyalin kode saya secara akurat ;-) pastikan Anda memiliki innerHTML di kedua sisi pernyataan, yaitu: document.body.innerHTML = document.body.innerHTML.replace ('ü', 'n');
Dexter
3
FYI - Bug di komentar pertama adalah: set window.onload = clear;tanpa tanda kurung "()". Ketika Anda menulis clear()maka Anda benar-benar menjalankan fungsinya, tetapi Anda hanya ingin menetapkan fungsi tersebut ke onload-handler
Philipp
1
Perhatikan bahwa menggunakan innerHTML umumnya dianggap buruk belakangan ini: slideshare.net/x00mario/the-innerhtml-apocalypse
kufudo
13

Fungsi di bawah ini bekerja dengan sempurna untuk saya:

// Note this *is* JQuery, see below for JS solution instead
function replaceText(selector, text, newText, flags) {
  var matcher = new RegExp(text, flags);
  $(selector).each(function () {
    var $this = $(this);
    if (!$this.children().length)
       $this.text($this.text().replace(matcher, newText));
  });
}

Berikut contoh penggunaan:

function replaceAllText() {
  replaceText('*', 'hello', 'hi', 'g');
}

$(document).ready(replaceAllText);
$('html').ajaxStop(replaceAllText);

Anda juga dapat menggunakan melakukan penggantian langsung seperti:

document.body.innerHTML = document.body.innerHTML.replace('hello', 'hi');

Namun berhati-hatilah karena dapat memengaruhi tag, css, dan skrip juga.

EDIT: Adapun solusi JavaScript murni, gunakan metode ini sebagai gantinya:

function replaceText(selector, text, newText, flags) {
  var matcher = new RegExp(text, flags);
  var elems = document.querySelectorAll(selector), i;

  for (i = 0; i < elems.length; i++)
    if (!elems[i].childNodes.length)
      elems[i].innerHTML = elems[i].innerHTML.replace(matcher, newText);
}
Ziad
sumber
Bagaimana cara seseorang mengganti semua teks dalam tag tertentu (seperti <p> ​​atau <span>) dengan beberapa teks lain?
GJZ
Cukup tambahkan nama tag ke parameter input pertama misalnya replaceText ('p, span', 'hello', 'hi')
Ziad
Ini tidak bekerja dengan benar. Pertimbangkan ini: <p> hello <strong>world</i> </p>. halo tidak diganti.
David Vielhuber
Hai, saya pemula dalam coding. Saya dapat melakukan beberapa hal baik dengan AppleScript. Tapi hanya itu yang saya tahu. Tolong beri saya beberapa saran, apa yang harus dimulai, tujuan saya adalah menggunakan javascript untuk mengotomatiskan pengumpulan database, gambar, video, mengisi formulir web, mengunggah, mungkin untuk bekerja dengan excel. Applescript tidak masalah dengan itu tetapi java tampaknya merupakan level yang sama sekali baru dan jauh lebih baik. Apa yang harus saya mulai untuk mencapai tujuan saya. Saya tahu 0 tentang javascript dan saya bahkan tidak tahu cara membuat skrip Anda di atas berfungsi! Di mana saya bisa menempelkannya? Terima kasih banyak!
Duy Duy
12

Saya berakhir dengan fungsi ini untuk mengganti teks dengan aman tanpa efek samping (sejauh ini):

function replaceInText(element, pattern, replacement) {
    for (let node of element.childNodes) {
        switch (node.nodeType) {
            case Node.ELEMENT_NODE:
                replaceInText(node, pattern, replacement);
                break;
            case Node.TEXT_NODE:
                node.textContent = node.textContent.replace(pattern, replacement);
                break;
            case Node.DOCUMENT_NODE:
                replaceInText(node, pattern, replacement);
        }
    }
}

Ini untuk kasus di mana 16kB findAndReplaceDOMTextagak terlalu berat.

masa depan yang funky
sumber
Hai, saya pemula dalam coding. Saya dapat melakukan beberapa hal baik dengan AppleScript. Tapi hanya itu yang saya tahu. Tolong beri saya beberapa saran, apa yang harus dimulai, tujuan saya adalah menggunakan javascript untuk mengotomatiskan pengumpulan database, gambar, video, mengisi formulir web, mengunggah, mungkin untuk bekerja dengan excel. Applescript tidak masalah dengan itu tetapi java tampaknya merupakan level yang sama sekali baru dan jauh lebih baik. Apa yang harus saya mulai untuk mencapai tujuan saya. Saya tahu 0 tentang javascript dan saya bahkan tidak tahu cara membuat skrip Anda di atas berfungsi! Di mana saya bisa menempelkannya? Terima kasih banyak!
Duy Duy
Duy Duy, itu banyak masalah. Mengingat uraian tugas saja, sudah cukup alasan untuk berhenti dari pekerjaan itu.
funky-masa depan
9

Saya memiliki masalah yang sama. Saya menulis fungsi saya sendiri menggunakan replace pada innerHTML, tetapi itu akan mengacaukan tautan jangkar dan semacamnya.

Untuk membuatnya bekerja dengan benar saya menggunakan perpustakaan untuk menyelesaikannya.

Perpustakaan memiliki API yang luar biasa. Setelah memasukkan script saya menyebutnya seperti ini:

findAndReplaceDOMText(document.body, {
  find: 'texttofind',
  replace: 'texttoreplace'
  }
);
David Silva Smith
sumber
Ini adalah satu-satunya solusi yang berhasil untuk masalah saya. Saya perlu menggunakan REGEX untuk menemukan dan mengganti nomor telepon di seluruh situs dan jawaban lain di sini akan merusak acara DOM saya.
DavyH
3

Saya mencoba untuk mengganti string yang sangat besar dan untuk beberapa alasan ekspresi reguler memberikan beberapa kesalahan / pengecualian.

Jadi saya menemukan alternatif ekspresi reguler ini yang juga berjalan cukup cepat. Setidaknya itu cukup cepat bagi saya:

var search = "search string";
var replacement = "replacement string";

document.body.innerHTML = document.body.innerHTML.split(search).join(replacement)

src: Bagaimana cara mengganti semua kemunculan string di JavaScript?

Bartho Bernsmann
sumber
2

Gunakan fungsi ganti string javascript default

var curInnerHTML = document.body.innerHTML;
curInnerHTML = curInnerHTML.replace("hello", "hi");
document.body.innerHTML = curInnerHTML;
Mark Costello
sumber
1

Cobalah untuk menerapkan solusi yang disarankan di atas pada dokumen yang cukup besar, mengganti string yang cukup pendek yang mungkin ada di innerHTML atau bahkan innerText, dan desain html Anda menjadi rusak paling baik

Oleh karena itu, pertama-tama saya hanya mengambil elemen simpul teks melalui simpul DOM HTML, seperti ini

function textNodesUnder(node){
  var all = [];
  for (node=node.firstChild;node;node=node.nextSibling){
    if (node.nodeType==3) all.push(node);
    else all = all.concat(textNodesUnder(node));
  }
  return all;
}

textNodes=textNodesUnder(document.body)
for (i in textNodes) { textNodes[i].nodeValue = textNodes[i].nodeValue.replace(/hello/g, 'hi');    

ʻDan selanjutnya saya menerapkan penggantian pada semuanya dalam siklus

FantomX1
sumber
1

Ingin menambahkan contoh jawaban funky-future karena saya terus mendapatkan kesalahan ini:

Uncaught TypeError: element.childNodes is not iterable

gunakan seperti ini:

replaceInText(document.body,"search term","replacement");

itu tidak berhasil untuk saya dengan pemilih jQuery.

Y Stroli
sumber
1
Jika Anda memiliki pertanyaan baru, silakan tanyakan dengan mengklik tombol Ajukan Pertanyaan . Sertakan link ke pertanyaan ini jika membantu memberikan konteks. - Dari Ulasan
SilverNak
1
Ini bukan pertanyaan baru, saya memperluas jawaban funky-future dengan memberikan contoh yang berhasil. harus memposting jawaban baru karena saya kurang perwakilan untuk mengomentari.
Y Stroli
1

Terkadang mengubah document.body.innerHTMLmerusak beberapa skrip JS di halaman. Ini versi, yang hanya mengubah konten textelemen:

function replace(element, from, to) {
    if (element.childNodes.length) {
        element.childNodes.forEach(child => replace(child, from, to));
    } else {
        const cont = element.textContent;
        if (cont) element.textContent = cont.replace(from, to);
    }
};

replace(document.body, new RegExp("hello", "g"), "hi");
Oleksandr Boiko
sumber
0

Saya baru Javascriptdan baru mulai mempelajari keterampilan ini. Silakan periksa apakah metode di bawah ini berguna untuk mengganti teks.

<script>

    var txt=document.getElementById("demo").innerHTML;
    var pos = txt.replace(/Hello/g, "hi")
    document.getElementById("demo").innerHTML = pos;

</script>
Manish
sumber