Ich habe eine Seite mit vielen Textfeldern. Wenn jemand auf einen Link klickt, möchte ich, dass ein oder zwei Wörter an der Stelle eingefügt werden, an der sich der Cursor befindet, oder an das Textfeld angehängt werden, das den Fokus hat.
Wenn sich der Cursor / Fokus beispielsweise auf einem Textfeld mit der Aufschrift "Apfel" befindet und er auf einen Link mit der Aufschrift "[E-Mail]" klickt, soll das Textfeld "Apfel [email protected]" lauten.
Wie kann ich das machen? Ist das überhaupt möglich, denn was ist, wenn der Fokus auf einem Radio / Dropdown / Nicht-Textbox-Element liegt? Kann man sich an das letzte Textfeld erinnern?
javascript
jquery
Klicken Sie auf Upvote
quelle
quelle
Antworten:
Verwenden Sie dies von hier aus :
quelle
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; }
Vielleicht wäre eine kürzere Version leichter zu verstehen?
Ich habe dies als Antwort auf Wie füge ich einen Text zu einem Textfeld von der aktuellen Position des Zeigers mit jquery hinzu?
quelle
document.getElementById("txt").selectionStart = caretPos + txtToAdd.length
.Die genehmigte Antwort von George Claghorn funktionierte hervorragend, um einfach Text an der Cursorposition einzufügen. Wenn der Benutzer jedoch Text ausgewählt hat und dieser Text ersetzt werden soll (die Standarderfahrung bei den meisten Texten), müssen Sie beim Festlegen der Variablen "Zurück" eine kleine Änderung vornehmen.
Wenn Sie ältere IE-Versionen nicht unterstützen müssen, unterstützen moderne Versionen textarea.selectionStart, sodass Sie die gesamte Browsererkennung und den IE-spezifischen Code entfernen können.
Hier ist eine vereinfachte Version, die mindestens für Chrome und IE11 funktioniert und das Ersetzen von ausgewähltem Text übernimmt.
quelle
maxlength
berücksichtigt jedoch nicht die Elemente , sodass der resultierende Wert nach dem Einfügen länger als das Maximum sein kann.Der obige Code hat bei mir im IE nicht funktioniert. Hier ist ein Code, der auf dieser Antwort basiert .
Ich habe das herausgenommen,
getElementById
damit ich das Element auf eine andere Weise referenzieren kann.BEARBEITEN: Ein laufendes Snippet wurde hinzugefügt. JQuery wird nicht verwendet .
quelle
element.focus()
ist eine legitime JavaScript-Methode auf DOMElements: w3schools.com/jsref/met_html_focus.aspmit @quick_sliv Antwort:
quelle
So fügen Sie über JQuery und JavaScript Text in die aktuelle Cursorposition einer TextBox ein
Prozess
Hier habe ich 2 Textboxen und einen Button. Ich muss auf eine bestimmte Position in einem Textfeld klicken und dann auf die Schaltfläche klicken, um den Text aus dem anderen Textfeld an die Position des vorherigen Textfelds einzufügen.
Das Hauptproblem hierbei ist, dass die aktuelle Cursorposition abgerufen wird, an der der Text eingefügt wird.
quelle
Das Hinzufügen von Text zur aktuellen Cursorposition umfasst zwei Schritte:
Demo: https://codepen.io/anon/pen/qZXmgN
Getestet in Chrome 48, Firefox 45, IE 11 und Edge 25
JS:
HTML:
quelle
Ich denke, Sie könnten das folgende JavaScript verwenden, um das zuletzt fokussierte Textfeld zu verfolgen:
Verwendung:
Eine frühere Lösung (Requisiten für Gclaghorn) verwendet Textbereich und berechnet auch die Position des Cursors, sodass es möglicherweise besser für das ist, was Sie möchten. Auf der anderen Seite wäre dieser leichter, wenn Sie danach suchen.
quelle
Die akzeptierte Antwort funktionierte in Internet Explorer 9 nicht für mich. Ich habe sie überprüft und die Browsererkennung funktionierte nicht richtig. Als ich im Internet Explorer war , wurde ff (Firefox) erkannt .
Ich habe gerade diese Änderung vorgenommen:
Anstatt:
Der resultierende Code ist folgender:
quelle
Dieses jQuery-Plugin bietet Ihnen eine vorgefertigte Möglichkeit zur Auswahl / Caret-Manipulation.
quelle
Sie können nur das erforderliche Textfeld fokussieren und den Text dort einfügen. Es gibt keine Möglichkeit herauszufinden, wo der Fokus auf AFAIK liegt (möglicherweise über alle DOM-Knoten hinweg?).
Überprüfen Sie diesen Stapelüberlauf - er hat eine Lösung für Sie: Wie finde ich heraus, welches DOM-Element den Fokus hat?
quelle
Inhalt bearbeitbar, HTML oder eine andere DOM-Elementauswahl
Wenn Sie versuchen, bei Caret auf einem einzufügen
<div contenteditable="true">
, wird dies viel schwieriger, insbesondere wenn sich Kinder im bearbeitbaren Container befinden.Ich hatte wirklich großes Glück mit der Rangy- Bibliothek:
Es hat eine Menge großartiger Funktionen wie:
Die Online-Demo funktionierte zuletzt nicht, aber das Repo hat funktionierende Demos. Laden Sie zunächst das Repo von Git oder NPM herunter und öffnen Sie ./rangy/demos/index.html
Es macht das Arbeiten mit Caret Pos und Textauswahl zum Kinderspiel!
quelle
Die Antwort auf diese Frage wurde vor so langer Zeit veröffentlicht und ich bin über eine Google-Suche darauf gestoßen. HTML5 bietet die HTMLInputElement-API , die die setRangeText () -Methode enthält, die einen Textbereich in einem
<input>
oder<textarea>
-Element durch eine neue Zeichenfolge ersetzt:Die oben ersetzen würde die Auswahl getroffen innen
element
mitabc
. Sie können auch angeben, welcher Teil des Eingabewerts ersetzt werden soll:Das Obige würde das 4. bis 6. Zeichen des Eingabewerts durch ersetzen
abc
. Sie können auch festlegen, wie die Auswahl festgelegt werden soll, nachdem der Text ersetzt wurde, indem Sie eine der folgenden Zeichenfolgen als vierten Parameter angeben:'preserve'
versucht, die Auswahl beizubehalten. Dies ist die Standardeinstellung.'select'
wählt den neu eingefügten Text aus.'start'
Verschiebt die Auswahl kurz vor den eingefügten Text.'end'
Verschiebt die Auswahl direkt nach dem eingefügten Text.Browser-Kompatibilität
Die MDN-Seite für setRangeText enthält keine Browserkompatibilitätsdaten, aber ich denke, sie entspricht der HTMLInputElement.setSelectionRange () , bei der es sich im Grunde um alle modernen Browser handelt, IE 9 und höher, Edge 12 und höher.
quelle