Saya membuat bookmarklet yang akan mengubah semua huruf, seperti "R", dengan huruf lain, seperti "W", atau mungkin mengganti seluruh kata. Saya telah mencoba menggunakan kode berikut, tetapi itu mengacaukan situs web, dan menunjukkan elemen-elemen dalam elemen.

javascript: $("body").text($("body").text().replace("r", "w"));

Apakah akan ada solusi untuk ini?

Bagi Anda yang bertanya-tanya untuk apa saya menggunakan ini, saya mencoba membuat kode yang akan mengubah ini:

Halo, nama saya Jonathan Grasswell, dan saya ingin mengusulkan ide baru untuk sebuah traktor.

Ke dalam ini:

Hewwo, nyame saya adalah Jonnyathyan Gwyassweww, aynd saya ingin pwopose a nyew ideya fow ay twactow.

Pada dasarnya, "OWOfier". Juga, apakah mungkin untuk memasukkan emotikon acak 20% dari waktu setelah suatu periode?

1
Questionable_Mushroom 29 Oktober 2019, 03:36

2 jawaban

Jawaban Terbaik

BODY jika penuh dengan hal-hal HTML. Masalah Anda ada di sini $("body").text($, karena dalam .text( Anda mengatakan : "Jadikan body be this text: " kehilangan seluruh markup.
Anda sebaiknya mengulangi setiap NodeType yang merupakan 3 (Node.TEXT_NODE) atau lebih tepatnya dengan menggunakan API TreeWalker

const body = document.body; // Or whatever more specific element you desire
const repl = { // Your replacements:
  "l"   : "w",
  "L"   : "W",
  "r"   : "w",
  "R"   : "W",
  "\\." : ". :)" // Remember, escape RegExp special characters to treat them as literals
};

const treeWalker = document.createTreeWalker(body, NodeFilter.SHOW_TEXT);

while (treeWalker.nextNode()) {
  const Node = treeWalker.currentNode; // PS: Node.nodeType is always 3 
  Object.keys(repl).forEach(key => {
    Node.nodeValue = Node.nodeValue.replace(new RegExp(key, "g"), repl[key]);
  });
}
.hello, .ll {color: BURLYWOOD;} /* "l"s of "class" and "hello" will stay intact */
<h1 class="hello">Hello,</h1>
<p>
  my name is <b class="ll">Long Island</b>, 
  and I would like to propose a new idea. For a clock. LOL
</p>
0
Roko C. Buljan 4 November 2019, 01:41

Metode text() hanya mengembalikan konten teks badan.

Coba fungsi ini, jalankan fungsi ini di bawah konsol halaman ini dengan menekan F12, fungsi ini sambil mengganti "Jonathan" dengan "ABCDEFGHIJKLMN".

function replaceTextOfElement(element) {
  $(element).contents()
    .filter((_, child) => child.tagName !== 'SCRIPT' && child.tagName !== 'STYLE' && child.tagName !== 'IFRAME')
    .each((_, child) => {
      if(child.nodeType === Node.TEXT_NODE) {
        child.data = child.data.replace('Jonathan', 'ABCDEFGHIJKLMN');
      } else {
        replaceTextOfElement(child);
      }
    });
}
replaceTextOfElement($('body'));
0
鸿则_ 29 Oktober 2019, 01:19