Apa perbedaan antara textContent
dan innerText
dalam JavaScript?
Dapatkah saya menggunakan textContent
sebagai berikut:
var logo$ = document.getElementsByClassName('logo')[0];
logo$.textContent = "Example";
javascript
JK
sumber
sumber
innerText
dantextContent
jelas tidak sama. Peristiwa white-space dalam konten node akan menyebabkan dua properti menghasilkan konten yang berbeda, dan demikian juga akan terjadibr
elemen dan keturunan yang dihasilkan tingkat blok lainnya.Jawaban:
Tidak ada jawaban lain yang berhasil memberikan penjelasan lengkap, karenanya yang ini. Perbedaan utama antara
innerText
dantextContent
diuraikan dengan sangat baik di posting blog Kelly Norton: innerText vs textContent . Di bawah ini Anda dapat menemukan ringkasan:innerText
tidak standar, sedangkantextContent
standar sebelumnya.innerText
mengembalikan teks yang terlihat yang terkandung dalam sebuah node, sementaratextContent
mengembalikan penuh teks . Misalnya, pada HTML berikut<span>Hello <span style="display: none;">World</span></span>
,innerText
akan mengembalikan 'Hello', sementaratextContent
akan mengembalikan 'Hello World'. Untuk daftar perbedaan yang lebih lengkap, lihat tabel di http://perfectionkills.com/the-poor-misunderstood-innerText/ (bacaan lebih lanjut di 'innerText' berfungsi di IE, tetapi tidak di Firefox ).innerText
jauh lebih berat karena membutuhkan informasi tata letak untuk mengembalikan hasilnya.innerText
didefinisikan hanya untukHTMLElement
objek, sedangkantextContent
didefinisikan untuk semuaNode
objek.Solusi untuk
textContent
di IE8- akan melibatkan fungsi rekursif menggunakannodeValue
pada semuachildNodes
node yang ditentukan, berikut ini coba di polyfill:sumber
innerText
akan mengubah<br>
elemen menjadi karakter baris baru, sementaratextContent
hanya akan mengabaikannya. Jadi 2 kata dengan hanya<br>
elemen di antara mereka (dan tanpa spasi) akan digabungkan ketika menggunakantextContent
elem.textContent = 'foobar'
vselem.innerText = 'foobar'
innerText
dantextContent
: Jika Anda mengubahtext-transform
elemen dengan CSS, itu akan mempengaruhi hasil 'innerText', tetapi bukan hasiltextContent
. Misalnya:innerText
dari<div style="text-transform: uppercase;">Hello World</div>
akan "HELLO WORLD", sementaratextContent
akan "Hello World".textContent
adalah satu-satunya yang tersedia untuk simpul teks:Dalam node elemen,
innerText
mengevaluasi elemen <br>, sementaratextContent
mengevaluasi karakter kontrol:span.innerText
memberi:span.textContent
memberi:String dengan karakter kontrol (mis. Umpan baris) tidak tersedia dengan
textContent
, jika konten diatur denganinnerText
. Dengan cara lain (atur karakter kontrol dengantextContent
), semua karakter dikembalikan denganinnerText
dantextContent
:sumber
Keduanya
innerText
&textContent
distandarisasi pada 2016. SemuaNode
objek (termasuk node teks murni) milikitextContent
, tetapi hanyaHTMLElement
objek yang memilikinyainnerText
.Sementara
textContent
bekerja dengan sebagian besar browser, itu tidak berfungsi pada IE8 atau sebelumnya. Gunakan polyfill ini untuk hanya bekerja pada IE8. Polyfill ini tidak akan berfungsi dengan IE7 atau yang lebih lama.The
Object.defineProperty
metode adalah availabe di IE9 atau naik, namun tersedia di IE8 untuk DOM objek saja.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent
sumber
innerText
adalah teman Anda.Object.defineProperty()
?Bagi mereka yang mencari di Google pertanyaan ini dan tiba di sini. Saya merasa jawaban yang paling jelas untuk pertanyaan ini ada di dokumen MDN: https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent .
Anda dapat melupakan semua poin yang mungkin membingungkan Anda tetapi ingat 2 hal:
textContent
biasanya properti yang Anda cari.innerText
kira-kira teks yang akan didapat pengguna jika mereka menyorot konten elemen dengan kursor dan kemudian disalin ke clipboard. DantextContent
memberi Anda segalanya, terlihat atau tersembunyi, termasuk<script>
dan<style>
elemen.sumber
textContent didukung oleh sebagian besar browser. Ini tidak didukung oleh ie8 atau sebelumnya, tetapi polyfill dapat digunakan untuk ini
Lihat http://www.w3schools.com/jsref/prop_node_textcontent.asp
sumber
textContent mengembalikan teks lengkap dan tidak peduli tentang visibilitas, sementara innerText tidak.
Output dari textContent:
Output dari innerText (perhatikan bagaimana innerText menyadari akan adanya tag
<br>
, dan abaikan elemen tersembunyi):sumber
Terlepas dari semua perbedaan yang disebutkan dalam jawaban lain, berikut ini satu lagi yang baru saya temukan:
Meskipun
innerText
properti dikatakan telah distandarisasi sejak 2016, properti ini menunjukkan perbedaan antara browser: Mozilla mengabaikan karakter U + 200E dan U + 200F ("lrm" dan "rlm")innerText
, sementara Chrome tidak.Firefox melaporkan 3 dan 2, Chrome melaporkan 3 dan 3.
Belum yakin apakah ini bug (dan jika demikian, di browser mana) atau hanya salah satu dari ketidakcocokan unik yang harus kita jalani.
sumber
innerHTML akan mengeksekusi bahkan tag HTML yang mungkin berbahaya menyebabkan segala jenis serangan injeksi sisi klien seperti XSS berbasis DOM. Berikut ini cuplikan kode:
Jika Anda menggunakan .textContent, itu tidak akan mengevaluasi tag HTML dan mencetaknya sebagai String.
Referensi: https://www.scip.ch/en/?labs.20171214
sumber