Bagaimana Anda mendapatkan posisi tanda kuret dalam <textarea>
menggunakan JavaScript?
Sebagai contoh: This is| a text
Ini harus kembali 7
.
Bagaimana Anda mendapatkannya untuk mengembalikan string yang mengelilingi kursor / seleksi?
Misalnya: 'This is', '', ' a text'
.
Jika kata "is" disorot, maka itu akan kembali 'This ', 'is', ' a text'
.
javascript
cursor
textarea
caret
Gelisah Pengembara
sumber
sumber
textarea.selectionStart
,textarea. selectionEnd
,textarea.setSelectionRange
developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElementJawaban:
Dengan Firefox, Safari (dan peramban berbasis Gecko lainnya) Anda dapat dengan mudah menggunakan textarea.selectionStart, tetapi untuk IE yang tidak berfungsi, jadi Anda harus melakukan sesuatu seperti ini:
( kode lengkap di sini )
Saya juga menyarankan Anda untuk memeriksa Plugin jQuery FieldSelection , ini memungkinkan Anda untuk melakukan itu dan banyak lagi ...
Sunting: Saya benar-benar menerapkan kembali kode di atas:
Lihat contoh di sini .
sumber
Safari (and other Gecko based browsers)
Tampaknya menyiratkan bahwa Safari menggunakan Gecko. Gecko adalah mesin Mozilla; Safari menggunakan WebKit.if (el.selectionStart) { return el.selectionStart; }
...Diperbarui 5 September 2010
Melihat semua orang sepertinya diarahkan ke sini untuk masalah ini, saya menambahkan jawaban saya ke pertanyaan serupa, yang berisi kode yang sama dengan jawaban ini tetapi dengan latar belakang penuh bagi mereka yang tertarik:
Document.selection.createRange IE tidak termasuk memimpin atau mengikuti baris kosong
Untuk menghitung trailing line break sangat rumit di IE, dan saya belum melihat solusi yang melakukan ini dengan benar, termasuk jawaban lain untuk pertanyaan ini. Namun dimungkinkan, menggunakan fungsi berikut, yang akan mengembalikan Anda awal dan akhir seleksi (yang sama dalam kasus tanda sisipan) dalam suatu
<textarea>
atau teks<input>
.Perhatikan bahwa textarea harus memiliki fokus agar fungsi ini berfungsi dengan baik di IE. Jika ragu, hubungi metode textarea
focus()
terlebih dahulu.sumber
range && range.parentElement() == el
sana untuk menguji apakah seleksi ada di dalam textarea dan diperlukan. Tidak ada masalah dengan fungsi mendapatkan posisi caret selama textarea memiliki fokus . Jika tidak yakin, panggil metode textareafocus()
sebelum menelepongetInputSelection()
. Saya akan menambahkan catatan pada jawabannya.mousedown
event atau menambahkanunselectable="on"
ke<div>
elemen.Saya memodifikasi fungsi di atas menjadi akun carriage return di IE. Ini belum diuji tetapi saya melakukan sesuatu yang mirip dengan itu dalam kode saya sehingga harus bisa dikerjakan.
sumber
Jika Anda tidak harus mendukung IE, Anda dapat menggunakan
selectionStart
danselectionEnd
atributtextarea
.Untuk mendapatkan posisi caret gunakan saja
selectionStart
:Untuk mendapatkan string seputar seleksi, gunakan kode berikut:
Demo di JSFiddle .
Lihat juga dokumen HTMLTextAreaElement .
sumber