Saya ingin memperbarui teks elemen secara dinamis:
<div>
**text to change**
<someChild>
text that should not change
</someChild>
<someChild>
text that should not change
</someChild>
</div>
Saya baru mengenal jQuery, jadi tugas ini tampaknya cukup menantang bagi saya. Bisakah seseorang mengarahkan saya ke fungsi / pemilih untuk digunakan?
Jika memungkinkan, saya ingin melakukannya tanpa menambahkan wadah baru untuk teks yang perlu saya ubah.
javascript
jquery
ika
sumber
sumber
Jawaban:
Mark mendapatkan solusi yang lebih baik menggunakan jQuery , tetapi Anda mungkin juga dapat melakukan ini di JavaScript biasa.
Dalam Javascript,
childNodes
properti memberi Anda semua node turunan dari suatu elemen, termasuk node teks.Jadi, jika Anda tahu teks yang ingin Anda ubah selalu menjadi hal pertama dalam elemen, lalu berikan contoh HTML ini:
Anda bisa melakukan ini:
Tentu saja, Anda masih dapat menggunakan jQuery untuk memilih
<div>
di tempat pertama (yaituvar your_div = $('your_div').get(0);
).sumber
data
ataunodeValue
properti.$('#yourDivId')[0].childNodes[0].nodeValue = 'New Text';
Perbarui 2018
Karena ini adalah jawaban yang cukup populer, saya memutuskan untuk memperbarui dan mempercantiknya sedikit dengan menambahkan pemilih textnode ke jQuery sebagai plugin.
Dalam potongan di bawah ini Anda dapat melihat bahwa saya mendefinisikan fungsi jQuery baru yang mendapatkan semua (dan hanya) textNodes. Anda dapat menghubungkan
first()
fungsi ini juga dengan misalnya fungsi tersebut. Saya melakukan trim pada node teks dan memeriksa apakah tidak kosong setelah trim karena spasi, tab, baris baru, dll. Juga dikenali sebagai node teks. Jika Anda membutuhkan node itu juga, cukup hapus itu dari pernyataan if di fungsi jQuery.Saya menambahkan contoh bagaimana mengganti simpul teks pertama dan bagaimana mengganti semua simpul teks.
Pendekatan ini membuatnya lebih mudah untuk membaca kode dan lebih mudah untuk digunakan berkali-kali dan dengan tujuan yang berbeda.
The Perbarui 2017 (adrach) harus tetap bekerja dengan baik jika Anda lebih suka itu.
Sebagai ekstensi jQuery
Tampilkan cuplikan kode
Eqivilant Javascript (ES)
Tampilkan cuplikan kode
Perbarui 2017 (adrach):
Sepertinya ada beberapa hal yang berubah sejak ini diposting. Ini adalah versi yang diperbarui
Jawaban asli (Tidak berfungsi untuk versi saat ini)
Sumber: http://api.jquery.com/contents/
sumber
.filter(':first')
, tetapi menggunakan.first()
malah berhasil untuk saya. Terima kasih!.text()
(lihat jsfiddle ini ) tetapi dengan.replaceWith()
( jsfiddle di sini ).nodeType=3
itu berarti filter hanya jenis node "TEXT", w3schools.com/jsref/prop_node_nodetype.asp untuk info lebih lanjutLihat Beraksi
Markup:
sumber
Ini hanya mengubah textnode pertama
sumber
Cukup bungkus teks yang ingin Anda ubah dalam suatu rentang dengan kelas untuk dipilih.
Belum tentu menjawab pertanyaan Anda, saya tahu, tapi, mungkin praktik pengkodean yang lebih baik. Jaga semuanya tetap bersih dan sederhana
Voilà!
sumber
Untuk kasus spesifik yang Anda sebutkan:
... ini sangat mudah:
Anda tidak menyatakan bagaimana Anda ingin menggeneralisasikan ini. Jika, katakanlah, Anda ingin mengubah teks dari simpul teks pertama di dalam
<div>
, Anda dapat melakukan sesuatu seperti ini:sumber
sumber
Berikut adalah belum metode lain: http://jsfiddle.net/qYUBp/7/
HTML
JQUERY
sumber
Banyak jawaban bagus di sini tetapi mereka hanya menangani satu simpul teks dengan anak-anak. Dalam kasus saya, saya perlu mengoperasikan semua node teks dan mengabaikan anak html TAPI MELESTARIKAN PEMESANAN.
Jadi jika kita memiliki kasus seperti ini:
Kita dapat menggunakan kode berikut untuk memodifikasi teks saja DAN MELESTARIKAN PEMESANAN
Berikut adalah jsfiddle itu bekerja
sumber
Saya pikir Anda sedang mencari .prependTo ().
http://api.jquery.com/prependTo/
sumber
Jawaban sederhana:
sumber
Masalah dengan jawaban Mark adalah Anda mendapatkan textnode kosong juga. Solusi sebagai plugin jQuery:
sumber
Ini adalah pertanyaan lama tetapi Anda dapat membuat fungsi sederhana seperti ini untuk membuat hidup Anda lebih mudah:
Contoh:
Pemakaian:
sumber
Vesrsion 2019 - Pendek & Sederhana
Penjelasan
document.querySelector('#your-div-id')
digunakan untuk memilih induk (elemen teks yang akan Anda ubah).childNodes[0]
memilih node teks.nodeValue = 'new text'
setel nilai simpul teks ke "teks baru"Jawaban ini mungkin terinspirasi dari komentar Dean Martin. Tidak dapat mengatakan dengan pasti karena saya telah menggunakan solusi ini selama bertahun-tahun sekarang. Hanya berpikir saya harus memposting probabilitas ini di sini karena beberapa orang lebih memedulikannya daripada fakta bahwa ini adalah solusi terbaik.
sumber