Saya memiliki daftar dropdown yang diisi oleh Javascript.
Saat memutuskan apa yang seharusnya menjadi nilai default untuk ditampilkan saat dimuat, saya menyadari bahwa properti berikut menunjukkan nilai yang persis sama:
innerText
innerHtml
label
text
textContent
outerText
Penelitian saya sendiri menunjukkan tes penilaian atau perbandingan antara beberapa di antaranya, tetapi tidak semua.
Saya dapat menggunakan akal sehat saya sendiri dan memilih 1 atau yang lain karena memberikan hasil yang sama, tetapi, saya khawatir ini tidak akan menjadi ide yang baik jika datanya berubah.
Temuan saya adalah:
innerText
akan menunjukkan nilai sebagaimana adanya dan mengabaikan format HTML apa pun yang mungkin disertakaninnerHTML
akan menunjukkan nilai dan menerapkan format HTML apa punlabel
tampaknya sama denganinnerText
, jadi saya tidak bisa melihat perbedaannyatext
tampaknya samainnerText
tetapi versi singkatan jQuerytextContent
tampak samainnerText
tetapi tetap memformat (seperti\n
)outerText
tampaknya sama denganinnerText
Penelitian saya hanya dapat membawa saya sejauh saya hanya dapat menguji apa yang dapat saya pikirkan atau baca apa yang dipublikasikan, dapatkah ada orang yang mengkonfirmasi apakah penelitian saya benar dan jika ada sesuatu yang istimewa tentang label
dan outerText
?
sumber
.text()
untuk mendapatkan konten teks elemen, karena itu akan memberikan dukungan lintas-browser yang maksimal.Jawaban:
Dari MDN :
Jadi
innerText
tidak akan menyertakan teks yang disembunyikan oleh CSS, tapitextContent
akan.Dalam kasus anda tidak terjawab itu, saya ulangi lebih jelas: Do tidak menggunakan
.innerHTML
kecuali Anda secara khusus berniat untuk menyisipkan HTML dalam elemen dan telah mengambil tindakan pencegahan yang diperlukan untuk memastikan bahwa HTML Anda memasukkan tidak dapat berisi konten berbahaya. Jika Anda hanya ingin memasukkan teks, gunakan.textContent
atau jika Anda perlu mendukung IE8 dan sebelumnya, gunakan deteksi fitur untuk mematikan antara.textContent
dan.innerText
.Alasan utama adanya begitu banyak properti yang berbeda adalah karena browser yang berbeda awalnya memiliki nama yang berbeda untuk properti ini, dan masih belum ada dukungan lintas browser yang lengkap untuk semuanya. Jika Anda menggunakan jQuery, Anda harus tetap menggunakannya
.text()
karena itu dirancang untuk memuluskan perbedaan lintas-browser. *Untuk beberapa yang lain:
outerHTML
pada dasarnya sama denganinnerHTML
, kecuali itu termasuk tag awal dan akhir dari elemen miliknya. Saya tidak bisa menemukan banyak penjelasanouterText
sama sekali. Saya pikir itu mungkin properti warisan yang tidak jelas dan harus dihindari.sumber
in order to retrieve or write text within an element, people use innerHTML. textContent should be used instead
,, adalah bahwa textContent tidak didukung oleh IE 8, yang masih digunakan secara luas karena itu adalah versi yang dibundel dengan Windows 7. Dan FireFox tidak mendukung innerText . Jadi, meskipun innerHTML tidak cocok untuk tujuan tersebut, ia memiliki keandalan lintas browser yang lebih baik..textContent
dan.innerText
, atau menggunakan sesuatu seperti jQuery yang menghaluskan perbedaan browser ini.textContent
dengan tag HTML. Jika Anda perlu memasukkan HTML, Anda akan menggunakan.innerHTML
atau membangun node HTML menggunakandocument.createElement()
, dll.innerHTML
(tidak sepertitextContent
) dapat membuka pintu untuk serangan XSS (Cross-Site Scripting) pada aplikasi Anda. Jika konten yang dimasukkan ke DOM melaluiinnerHTML
tidak sepenuhnya dipercaya, penyerang dapat menggunakan<script>
elemen untuk membajak aplikasi Anda yang diautentikasi di bawah tingkat otorisasi pengguna atau admin. Semua serangan, termasuk serangan yang tampak aneh seperti<img src="x.x" onerror="alert('Hacked!');"/>
dan segudang serangan yang lebih licik secara efektif dihancurkan hanya dengan menggunakantextContent
dalam konteks ini, bukan berbahayainnerHTML
.Sebuah daftar dropdown terdiri dari sekumpulan
Option
objek, jadi Anda harus menggunakan.text
properti untuk memeriksa representasi tekstual dari elemen tersebut, yaituBtw,
Itu tidak benar;
$(element).text()
adalah versi jQuery sedangkanelement.text
versi akses properti.sumber
Tambahan untuk jawaban JLRishe yang sebaliknya sangat baik:
Alasan innerText dan outerText ada adalah karena simetri dengan innerHTML dan outerHTML. Ini menjadi penting saat Anda menugaskan ke properti.
Misalkan Anda memiliki elemen
e
dengan kode HTML<b>Lorem Ipsum</b>
:sumber
textContent
tidak akan memformat (\ n)sumber
Lihat kompatibilitas browser http://www.quirksmode.org/dom/html/ jika Anda menargetkan browser tertentu. Karena sepertinya mereka semua punya cara sendiri dalam melakukan sesuatu. Itulah mengapa lebih baik menggunakan JQuery .text () ( http://api.jquery.com/text/ ) jika Anda tidak ingin bermain-main.
sumber
text
danlabel
hapus spasi ekstra. Saya mendapatkan hasil ini saat menanyakan opsi dalam dropdown:sumber