Saya memiliki halaman dengan banyak kotak teks. Ketika seseorang mengklik sebuah tautan, saya ingin satu atau dua kata dimasukkan di mana kursor berada, atau ditambahkan ke kotak teks yang memiliki fokus.
Misalnya, jika kursor / fokus berada pada kotak teks bertuliskan 'apel' dan dia mengklik tautan yang mengatakan '[email]', maka saya ingin kotak teks itu mengatakan, 'apple [email protected]'.
Bagaimana saya bisa melakukan ini? Apakah ini bahkan mungkin, karena bagaimana jika fokusnya adalah pada elemen radio / dropdown / non textbox? Bisakah yang terakhir berfokus pada kotak teks diingat?
javascript
jquery
Klik Upvote
sumber
sumber
Jawaban:
Gunakan ini, dari sini :
sumber
areaId
?function deleteTxt() { var ele = document.getElementById('yourTextarea'); var text = ele.value; text = text.slice(0, ele.selectionStart) + text.slice(ele.selectionEnd); ele.value = text; return text; }
Mungkin versi yang lebih pendek, akan lebih mudah dimengerti?
Saya menulis ini sebagai tanggapan terhadap Bagaimana cara menambahkan teks ke kotak teks dari posisi pointer saat ini dengan jquery?
sumber
document.getElementById("txt").selectionStart = caretPos + txtToAdd.length
.Jawaban yang disetujui dari George Claghorn bekerja sangat baik untuk hanya memasukkan teks pada posisi kursor. Jika pengguna telah memilih teks, dan Anda ingin teks itu diganti (pengalaman default dengan sebagian besar teks), Anda harus membuat perubahan kecil ketika mengatur variabel 'kembali'.
Juga, jika Anda tidak perlu mendukung versi IE yang lebih lama, versi modern mendukung textarea.selectionStart, sehingga Anda dapat menghapus semua deteksi browser, dan kode khusus IE.
Berikut adalah versi yang disederhanakan yang paling tidak berfungsi untuk Chrome dan IE11, dan menangani penggantian teks yang dipilih.
sumber
maxlength
, jadi nilai yang dihasilkan setelah penyisipan bisa lebih lama dari maksimum.Kode di atas tidak berfungsi untuk saya di IE. Inilah beberapa kode berdasarkan jawaban ini .
Saya mengambil
getElementById
sehingga saya bisa referensi elemen dengan cara yang berbeda.Sunting: Menambahkan cuplikan yang sedang berjalan, jQuery tidak sedang digunakan .
sumber
element.focus()
adalah metode JavaScript yang sah di DOMElements: w3schools.com/jsref/met_html_focus.aspmenggunakan jawaban @quick_sliv:
sumber
Cara memasukkan beberapa Teks ke posisi kursor saat ini dari TextBox melalui JQuery dan JavaScript
Proses
Di sini saya memiliki 2 Kotak Teks dan Tombol. Saya harus Klik pada posisi tertentu pada kotak teks dan kemudian klik tombol untuk menempelkan teks dari kotak teks lain ke posisi kotak teks sebelumnya.
Masalah utama di sini adalah mendapatkan posisi kursor saat ini di mana kami akan menempelkan teks.
sumber
Menambahkan teks ke posisi kursor saat ini melibatkan dua langkah:
Demo: https://codepen.io/anon/pen/qZXmgN
Diuji di Chrome 48, Firefox 45, IE 11 dan Edge 25
JS:
HTML:
sumber
Saya pikir Anda bisa menggunakan JavaScript berikut untuk melacak kotak teks yang terakhir difokuskan:
Pemakaian:
Solusi sebelumnya (props to gclaghorn) menggunakan textarea dan menghitung posisi kursor juga, jadi mungkin lebih baik untuk apa yang Anda inginkan. Di sisi lain, yang ini akan lebih ringan, jika itu yang Anda cari.
sumber
Jawaban yang diterima tidak berfungsi untuk saya di Internet Explorer 9. Saya memeriksanya dan deteksi browser tidak berfungsi dengan baik, ia mendeteksi ff (firefox) ketika saya berada di Internet Explorer.
Saya baru saja melakukan perubahan ini:
Dari pada:
Kode yang dihasilkan adalah yang ini:
sumber
Plugin jQuery ini memberi Anda cara manipulasi seleksi / caret yang sudah dibuat sebelumnya.
sumber
Anda hanya dapat memfokuskan kotak teks yang diperlukan dan menyisipkan teks di sana. tidak ada cara untuk mengetahui di mana fokus adalah AFAIK (mungkin interating atas semua node DOM?).
periksa stackoverflow ini - ia memiliki solusi untuk Anda: Bagaimana cara mengetahui elemen DOM mana yang memiliki fokus?
sumber
Konten yang Dapat Diedit, HTML, atau Pilihan elemen DOM lainnya
Jika Anda mencoba memasukkan di caret pada
<div contenteditable="true">
, ini menjadi jauh lebih sulit, terutama jika ada anak-anak di dalam wadah yang dapat diedit.Saya sangat beruntung menggunakan perpustakaan Rangy :
Ini memiliki banyak fitur hebat seperti:
Demo online tidak berfungsi terakhir saya periksa, namun repo memiliki demo yang berfungsi. Untuk memulai, unduh Repo dari Git atau NPM secara sederhana, lalu buka ./rangy/demos/index.html
Itu membuat bekerja dengan pos tanda dan pemilihan teks menjadi mudah!
sumber
Jawaban pertanyaan ini telah diposting sejak lama dan saya menemukannya melalui pencarian Google. HTML5 menyediakan API HTMLInputElement yang mencakup metode setRangeText () , yang menggantikan berbagai teks dalam elemen
<input>
atau<textarea>
dengan string baru:Di atas akan menggantikan seleksi yang dilakukan di dalam
element
denganabc
. Anda juga dapat menentukan bagian mana dari nilai input yang akan diganti:Di atas akan menggantikan karakter ke-4 hingga ke-6 dari nilai input
abc
. Anda juga dapat menentukan bagaimana pemilihan harus ditetapkan setelah teks diganti dengan memberikan salah satu dari string berikut sebagai parameter ke-4:'preserve'
upaya untuk melestarikan seleksi. Ini standarnya.'select'
memilih teks yang baru dimasukkan.'start'
memindahkan pilihan tepat sebelum teks yang dimasukkan.'end'
memindahkan pilihan hanya setelah teks yang dimasukkan.Kompatibilitas browser
Halaman MDN untuk setRangeText tidak menyediakan data kompatibilitas browser, tapi saya kira itu akan sama dengan HTMLInputElement.setSelectionRange () , yang pada dasarnya adalah semua browser modern, IE 9 dan di atasnya, Edge 12 ke atas.
sumber