Saya menggunakan js sederhana untuk mengubah teks bagian dalam elemen label, dan saya tidak yakin atas dasar apa saya harus menggunakan innerHTML atau nodeValue atau textContent. Saya tidak perlu membuat simpul baru atau mengubah elemen HTML atau apa pun - cukup ganti teks. Berikut ini contoh kode:
var myLabel = document.getElementById("#someLabel");
myLabel.innerHTML = "Some new label text!"; // this works
myLabel.firstChild.nodeValue = "Some new label text!"; // this also works.
myLabel.textContent = "Some new label text!"; // this also works.
Saya melihat melalui sumber jQuery, dan ia menggunakan nodeValue tepat satu kali tetapi innerHTML dan textContent beberapa kali. Kemudian saya menemukan tes jsperf ini yang menunjukkan firstChild.nodeValue secara signifikan lebih cepat. Setidaknya itulah yang saya artikan.
Jika firstChild.nodeValue jauh lebih cepat, apa masalahnya? Apakah tidak didukung secara luas? Apakah ada masalah lain?
sumber
nodeValue
juga tidak parse html.textContent
outputtext/plain
sementara.innerHTML
outputtext/html
.Contoh cepat:
var example = document.getElementById('exampleId');
example.textContent = '<a href="https://google.com">google</a>';
output: <a href="http://google.com"> google </a>
example.innerHTML = '<a href="https://google.com">google</a>';
output: google
Anda dapat melihat dari contoh pertama bahwa output tipe
text/plain
tidak diuraikan oleh browser dan menghasilkan tampilan konten lengkap. Keluaran dari tipetext/html
memberitahu browser untuk menguraikannya sebelum menampilkannya.MDN innerHTML , MDN textContent , MDN nodeValue
sumber
Dua yang saya tahu dan bekerja dengan baik adalah innerHTML dan textContent .
Saya menggunakan textContent ketika saya hanya ingin mengubah teks paragraf atau heading seperti ini:
Jadi, textContent hanya mengubah teks, tetapi tidak mem-parsing HTML, seperti yang dapat kita ketahui dari tag yang terlihat dalam teks biasa pada hasil di sana.
Jika kami ingin mem-parsing HTML, kami menggunakan innerHTML seperti ini:
Jadi, contoh kedua mem-parsing string yang saya tetapkan ke properti innerHTML elemen DOM sebagai HTML.
Ini luar biasa, dan kerentanan keamanan besar:)
(cari XSS jika Anda ingin tahu tentang keamanan untuk ini)
sumber
innerText kira-kira adalah apa yang akan Anda dapatkan jika Anda memilih teks dan menyalinnya. Elemen yang tidak dirender tidak ada di innerText.
textContent adalah gabungan dari nilai-nilai semua TextNodes di sub-tree. Apakah diberikan atau tidak.
Berikut ini adalah posting bagus yang merinci perbedaan
innerHTML tidak boleh dimasukkan dalam perbandingan dengan innerText atau textContent, karena ini benar-benar berbeda, dan Anda harus benar-benar tahu mengapa :-) Cari secara terpisah
sumber
[Catatan: posting ini lebih tentang berbagi data tertentu yang mungkin membantu seseorang daripada memberi tahu orang lain apa yang harus dilakukan]
Jika seseorang bertanya-tanya apa yang tercepat hari ini: https://jsperf.com/set-innertext-vs-innerhtml-vs-textcontent & https://jsperf.com/get-innertext-vs-innerhtml-vs-textcontent ( untuk pengujian kedua, konten span adalah teks biasa, hasilnya dapat berubah sesuai dengan kontennya)
Sepertinya itu
.innerHtml
adalah pemenang hebat dalam hal kecepatan murni!(CATATAN: Saya hanya berbicara tentang kecepatan di sini, Anda mungkin ingin mencari kriteria lain sebelum memilih mana yang akan digunakan!)
sumber
Properti Element.innerHTML ke
set
, atauget
kode HTML elemen.Misalnya: Kami memiliki
<h1>
tag dan gaya yang kuat dengannya:<h1 id="myHeader" style="color: green"><strong>My Header</strong> Normal Text</h1>
Agarget
konten elemen memiliki id sama dengan "myHeader", kami akan melakukan hal yang sama:Hasil pengembalian:
Untuk "mengatur" konten (nilai) baru untuk elemen ini, kode akan ada di sini:
Jadi properti ini tidak hanya berfungsi dengan teks biasa, tetapi juga ditujukan untuk meneruskan atau menyalin kode HTML.
=> Kita seharusnya tidak menggunakannya.
Namun, banyak programmer (termasuk saya) menggunakan atribut ini untuk menyisipkan teks ke halaman web, dan metode ini membawa risiko potensial:
Karena alasan ini, penggunaan
innerHTML
tidak disarankan saat menyisipkan teks biasa, melainkan gunakantextContent
. ThetextContent
properti tidak akan mengerti bahwa kode Anda lulus adalah sintaks HTML, tetapi hanya 100% teks tidak lebih dan tidak kurang.Hasilnya kembali jika menggunakan
textContent
dalam contoh di atas:sumber