Jika saya memiliki rentang, katakan:
<span id="myspan"> hereismytext </span>
Bagaimana cara saya menggunakan JavaScript untuk mengubah "hereismytext" menjadi "newtext"?
Jika saya memiliki rentang, katakan:
<span id="myspan"> hereismytext </span>
Bagaimana cara saya menggunakan JavaScript untuk mengubah "hereismytext" menjadi "newtext"?
Jawaban:
Untuk peramban modern, Anda harus menggunakan:
document.getElementById("myspan").textContent="newtext";
Meskipun browser yang lebih lama mungkin tidak tahu textContent
, itu tidak dianjurkan untuk digunakan innerHTML
karena memperkenalkan kerentanan XSS ketika teks baru adalah input pengguna (lihat jawaban lain di bawah ini untuk diskusi yang lebih rinci):
//POSSIBLY INSECURE IF NEWTEXT BECOMES A VARIABLE!!
document.getElementById("myspan").innerHTML="newtext";
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.
document.getElementById("myspan").innerHTML = "sometext"; //INSECURE!!
Jalan yang benar:
span = document.getElementById("myspan");
txt = document.createTextNode("your cool text");
span.appendChild(txt);
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.
innerHTML
membutuhkan kehati-hatian, perhatikan bahwa solusi Anda menggunakan innerText
yang tidak didukung di Firefox. quirksmode.org/dom/html Ini juga menggunakan textContent
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?
EDIT: Ini ditulis pada tahun 2014. Anda mungkin tidak peduli tentang IE8 lagi dan bisa lupa menggunakan innerText
. Cukup gunakan textContent
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:
// * Fine for hardcoded text strings like this one or strings you otherwise
// control.
// * Not OK for user-supplied input or strings you don't control unless
// you know what you are doing and have sanitized the string first.
document.getElementById('myspan').innerHTML = 'newtext';
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:
var span = document.getElementById('myspan');
span.innerText = span.textContent = 'newtext';
Firefox tidak mendukung innerText
dan IE8 tidak mendukung textContent
sehingga Anda perlu menggunakan keduanya jika Anda ingin mempertahankan kompatibilitas lintas-browser.
Dan jika Anda ingin menghindari reflows (disebabkan oleh innerText
) jika memungkinkan:
var span = document.getElementById('myspan');
if ('textContent' in span) {
span.textContent = 'newtext';
} else {
span.innerText = 'newtext';
}
Inilah cara lain:
var myspan = document.getElementById('myspan');
if (myspan.innerText) {
myspan.innerText = "newtext";
}
else
if (myspan.textContent) {
myspan.textContent = "newtext";
}
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
Selain jawaban javascript murni di atas, Anda dapat menggunakan metode teks jQuery sebagai berikut:
$('#myspan').text('newtext');
Jika Anda perlu memperluas jawaban untuk mendapatkan / mengubah konten html dari elemen span atau div, Anda dapat melakukan ini:
$('#mydiv').html('<strong>new text</strong>');
Referensi:
.text (): http://api.jquery.com/text/
.html (): http://api.jquery.com/html/
Anda juga dapat menggunakan metode querySelector (), dengan asumsi id 'myspan' unik karena metode mengembalikan elemen pertama dengan pemilih yang ditentukan:
document.querySelector('#myspan').textContent = 'newtext';
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
document.getElementById("myspan").textContent="newtext";
ini akan memilih dom-node dengan id myspan
dan mengubahnya ke konten teksnew text
Anda dapat melakukan
document.querySelector ("[Span]"). textContent = "content_to_display";
Untuk rentang ini
<span id="name">sdfsdf</span>
Anda bisa seperti ini: -
$("name").firstChild.nodeValue = "Hello" + "World";