Mam stronę z wieloma polami tekstowymi. Kiedy ktoś kliknie łącze, chcę wstawić słowo lub dwa w miejscu kursora lub dołączyć do pola tekstowego, na którym jest fokus.
Na przykład, jeśli kursor / fokus znajduje się na polu tekstowym z napisem „jabłko” i kliknie łącze „[e-mail]”, chcę, aby w polu tekstowym było napisane „jabłko [email protected]”.
W jaki sposób mogę to zrobić? Czy jest to w ogóle możliwe, ponieważ co, jeśli fokus znajduje się na elemencie radio / dropdown / non textbox? Czy można zapamiętać ostatni skupiony na polu tekstowym?
javascript
jquery
Kliknij opcję Głos za
źródło
źródło
Odpowiedzi:
Użyj tego stąd :
źródło
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; }
Może krótsza wersja byłaby łatwiejsza do zrozumienia?
Napisałem to w odpowiedzi na Jak dodać tekst do pola tekstowego z aktualnej pozycji wskaźnika za pomocą jquery?
źródło
document.getElementById("txt").selectionStart = caretPos + txtToAdd.length
.Zatwierdzona odpowiedź od George'a Claghorna działała świetnie, gdy po prostu wstawiał tekst w miejscu kursora. Jeśli jednak użytkownik zaznaczył tekst i chcesz, aby ten tekst został zastąpiony (domyślne rozwiązanie z większością tekstu), musisz wprowadzić niewielką zmianę podczas ustawiania zmiennej „wstecz”.
Ponadto, jeśli nie potrzebujesz obsługi starszych wersji IE, nowoczesne wersje obsługują textarea.selectionStart, dzięki czemu możesz wyłączyć wszystkie funkcje wykrywania przeglądarki i kod specyficzny dla IE.
Oto uproszczona wersja, która działa przynajmniej w Chrome i IE11 i obsługuje zastępowanie zaznaczonego tekstu.
źródło
maxlength
pod uwagę elementu , więc wynikowa wartość po wstawieniu może być dłuższa niż maksymalna.Powyższy kod nie działał dla mnie w IE. Oto kod oparty na tej odpowiedzi .
Wyciągnąłem element,
getElementById
więc mogłem odwołać się do elementu w inny sposób.EDYCJA: Dodano działający fragment kodu, jQuery nie jest używany .
źródło
element.focus()
to legalna metoda JavaScript na DOMElements: w3schools.com/jsref/met_html_focus.aspużywając @quick_sliv answer:
źródło
Jak wstawić tekst do bieżącej pozycji kursora TextBox za pomocą JQuery i JavaScript
Proces
Tutaj mam 2 pola tekstowe i przycisk. Muszę kliknąć określoną pozycję w polu tekstowym, a następnie kliknąć przycisk, aby wkleić tekst z drugiego pola tekstowego do pozycji poprzedniego pola tekstowego.
Głównym problemem jest to, że uzyskanie aktualnej pozycji kursora, w którym wkleimy tekst.
źródło
Dodanie tekstu do aktualnej pozycji kursora obejmuje dwa kroki:
Demo: https://codepen.io/anon/pen/qZXmgN
Przetestowano w Chrome 48, Firefox 45, IE 11 i Edge 25
JS:
HTML:
źródło
Myślę, że możesz użyć następującego JavaScript do śledzenia ostatniego pola tekstowego:
Stosowanie:
Poprzednie rozwiązanie (rekwizyty do gclaghorn) używa textarea i oblicza również pozycję kursora, więc może być lepsze dla tego, co chcesz. Z drugiej strony ten byłby lżejszy, jeśli tego właśnie szukasz.
źródło
Zaakceptowana odpowiedź nie działała dla mnie w Internet Explorerze 9. Sprawdziłem to i wykrywanie przeglądarki nie działało poprawnie, wykryło ff (firefox), kiedy byłem w Internet Explorerze.
Właśnie dokonałem tej zmiany:
Zamiast:
Wynikowy kod jest taki:
źródło
Ta wtyczka jQuery daje ci gotowy sposób selekcji / manipulacji daszkiem.
źródło
możesz zaznaczyć tylko wymagane pole tekstowe i wstawić tam tekst. nie ma sposobu, aby dowiedzieć się, na czym skupia się AFAIK (może współdziałanie ze wszystkimi węzłami DOM?).
sprawdź ten stackoverflow - ma dla Ciebie rozwiązanie: Jak sprawdzić, który element DOM jest aktywny?
źródło
Możliwość edycji treści, HTML lub dowolny inny element DOM
Jeśli próbujesz wstawić z daszkiem na a
<div contenteditable="true">
, staje się to znacznie trudniejsze, zwłaszcza jeśli w edytowalnym kontenerze znajdują się elementy podrzędne.Miałem naprawdę wielkie szczęście korzystając z biblioteki Rangy :
Posiada mnóstwo wspaniałych funkcji, takich jak:
Demo online nie działało ostatnio, gdy sprawdzałem, jednak repozytorium ma działające wersje demonstracyjne. Aby rozpocząć, po prostu pobierz repozytorium z Git lub NPM, a następnie otwórz ./rangy/demos/index.html
To sprawia, że praca z karetką i zaznaczaniem tekstu jest dziecinnie prosta!
źródło
Odpowiedź na to pytanie została opublikowana tak dawno temu i natknąłem się na nią przez wyszukiwarkę Google. HTML5 udostępnia interfejs API HTMLInputElement, który zawiera metodę setRangeText () , która zastępuje zakres tekstu w elemencie
<input>
lub<textarea>
nowym ciągiem znaków:Powyższy zastąpi wybór dokonany wewnątrz
element
zabc
. Możesz również określić, która część wartości wejściowej ma zostać zastąpiona:Powyższe zamieniłoby od 4 do 6 znaki wartości wejściowej na
abc
. Możesz również określić, w jaki sposób należy ustawić zaznaczenie po zamianie tekstu, podając jeden z następujących ciągów jako czwarty parametr:'preserve'
próbuje zachować wybór. To jest ustawienie domyślne.'select'
wybiera nowo wstawiony tekst.'start'
przenosi zaznaczenie tuż przed wstawionym tekstem.'end'
przenosi zaznaczenie tuż za wstawionym tekstem.Zgodność z przeglądarkami
Strona MDN dla setRangeText nie dostarcza danych dotyczących zgodności przeglądarek, ale myślę, że byłaby taka sama jak HTMLInputElement.setSelectionRange () , czyli w zasadzie wszystkie nowoczesne przeglądarki, IE 9 i nowsze , Edge 12 i nowsze .
źródło