Jika saya memiliki rentang, katakan:
<span id="myspan"> hereismytext </span>
Bagaimana cara saya menggunakan JavaScript untuk mengubah "hereismytext" menjadi "newtext"?
javascript
html
pengguna105033
sumber
sumber
textContent
, sehingga orang baru akan didorong untuk menggunakan metode yang tepat dan aman?Menggunakan innerHTML adalah SO TIDAK DIREKOMENDASIKAN . Sebagai gantinya, Anda harus membuat textNode. Dengan cara ini, Anda "mengikat" teks Anda dan Anda tidak, setidaknya dalam kasus ini, rentan terhadap serangan XSS.
Jalan yang benar:
Untuk informasi lebih lanjut tentang kerentanan ini: Cross Site Scripting (XSS) - OWASP
Diedit nov ke-4 2017:
Dimodifikasi baris ketiga kode sesuai dengan saran @mumush : "gunakan appendChild (); sebagai gantinya".
Btw, menurut @Jimbo Jonny saya pikir semuanya harus diperlakukan sebagai input pengguna dengan menerapkan prinsip Keamanan oleh lapisan. Dengan begitu Anda tidak akan menemukan kejutan.
sumber
innerHTML
membutuhkan kehati-hatian, perhatikan bahwa solusi Anda menggunakaninnerText
yang tidak didukung di Firefox. quirksmode.org/dom/html Ini juga menggunakantextContent
yang tidak didukung di IE8. Anda dapat menyusun kode untuk mengatasi masalah ini.span.appendChild(txt);
sebagai gantinya!innerHTML
tidak disarankan adalah konyol. Belum lagi masih baik-baik saja setelah disanitasi. Gagasan bahwa seseorang harus membersihkan input pengguna SANGAT TIDAK TERKAIT dengan pertanyaan khusus ini. Paling-paling itu pantas catatan kecil di akhir mengatakan "btw: jika input pengguna pastikan untuk membersihkan dulu atau menggunakan metode X yang tidak membutuhkannya" .span.innerHTML = "";
kemudian tambahkan anak?sumber
EDIT: Ini ditulis pada tahun 2014. Anda mungkin tidak peduli tentang IE8 lagi dan bisa lupa menggunakan
innerText
. Cukup gunakantextContent
dan lakukan saja, hore.Jika Anda yang memasok teks dan tidak ada bagian teks yang disediakan oleh pengguna (atau sumber lain yang tidak Anda kontrol), maka pengaturan
innerHTML
mungkin dapat diterima:Namun, seperti yang dicatat orang lain, jika Anda bukan sumber untuk bagian mana pun dari string teks, menggunakan
innerHTML
dapat membuat Anda terkena serangan injeksi konten seperti XSS jika Anda tidak hati-hati membersihkan teks terlebih dahulu dengan benar.Jika Anda menggunakan input dari pengguna, berikut adalah salah satu cara untuk melakukannya dengan aman sambil tetap menjaga kompatibilitas lintas-browser:
Firefox tidak mendukung
innerText
dan IE8 tidak mendukungtextContent
sehingga Anda perlu menggunakan keduanya jika Anda ingin mempertahankan kompatibilitas lintas-browser.Dan jika Anda ingin menghindari reflows (disebabkan oleh
innerText
) jika memungkinkan:sumber
Saya menggunakan
Jquery
dan tidak ada yang membantu, saya tidak tahu mengapa tetapi ini berhasil:sumber
Inilah cara lain:
Properti innerText akan terdeteksi oleh Safari, Google Chrome dan MSIE. Untuk Firefox, cara standar dalam melakukan sesuatu adalah dengan menggunakan textContent tetapi karena versi 45 ia juga memiliki properti innerText, karena seseorang dengan ramah memberi tahu saya baru-baru ini. Solusi ini menguji apakah browser mendukung salah satu dari properti ini dan jika demikian, tetapkan "teks baru".
Demo langsung: di sini
sumber
Selain jawaban javascript murni di atas, Anda dapat menggunakan metode teks jQuery sebagai berikut:
Jika Anda perlu memperluas jawaban untuk mendapatkan / mengubah konten html dari elemen span atau div, Anda dapat melakukan ini:
Referensi:
.text (): http://api.jquery.com/text/
.html (): http://api.jquery.com/html/
sumber
Anda juga dapat menggunakan metode querySelector (), dengan asumsi id 'myspan' unik karena metode mengembalikan elemen pertama dengan pemilih yang ditentukan:
developer.mozilla
sumber
Seperti pada jawaban lain, innerHTML dan innerText tidak disarankan, lebih baik gunakan textContent . Atribut ini didukung dengan baik, Anda dapat memeriksanya: http://caniuse.com/#search=textContent
sumber
ini akan memilih dom-node dengan id
myspan
dan mengubahnya ke konten teksnew text
sumber
Anda dapat melakukan
sumber
Untuk rentang ini
Anda bisa seperti ini: -
sumber