Programmatisch Text in einem contenteditable HTML-Element auswählen?
In JavaScript, ist es möglich, programmgesteuert markieren Sie text in einer input
oder textarea
element. Sie können sich einen Eingang mit ipt.focus()
und wählen Sie dann den Inhalt mit ipt.wählen Sie()
. Sie können sogar wählen Sie einen bestimmten Bereich mit ipt.setSelectionRange(from,to)
.
Meine Frage ist: gibt es eine Möglichkeit, dies in einem contenteditable
element zu?
Fand ich, dass ich tun kann elem.focus()
setzen Sie die Einfügemarke in eine contenteditable
element, aber anschließend läuft elem.select()
funktioniert nicht (und auch nicht setSelectionRange
). Ich kann nicht finden, alles, was im web über Sie, aber vielleicht bin ich auf der Suche für die falsche Sache...
Durch die Art und Weise, ob es einen Unterschied macht, ich brauche nur in Google Chrome, dies ist eine Chrome-Erweiterung.
InformationsquelleAutor der Frage callum | 2011-05-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, wählen Sie alle den Inhalt eines Elements (contenteditable oder nicht), in Chrom, hier ist, wie. Dies funktioniert auch in Firefox, Safari 3+, Opera 9+ (evtl. in früheren Versionen auch) und IE 9. Sie können auch erstellen, Auswahl nach unten, um die Stufe des Charakters. Die APIs die Sie benötigen, sind DOM-Bereich (aktuelle Skillung ist DOM Level 2siehe auch MDN) und die Auswahl, die ist festgelegt als Teil einer neue Range-spec (MDN docs).
InformationsquelleAutor der Antwort Tim Down
Neben Tim Downs Antwortich habe eine Lösung, die funktionieren auch im oldIE:
Getestet im IE 8+, Firefox 3+, Opera 9+, & Chrom 2+. Auch ich habe es in einem jQuery-plugin:
...und wer intereseted in, hier ist die gleiche für alle Kaffee-junkies:
Update:
Wenn Sie möchten, wählen Sie die gesamte Seite oder der Inhalt eines bearbeitbaren Bereichs (markiert mit
contentEditable
), können Sie es viel einfacher, durch die Umstellung aufdesignMode
und mitdocument.execCommand
:Gibt es eine gute Ausgangspunkt bei MDN und ein littledocumentation.
(funktioniert auch in IE6+, Opera 9+, Firefoy 3+, Chrome 2+) http://caniuse.com/#search=execCommand
InformationsquelleAutor der Antwort yckart
Feingliedrige bietet Ihnen die Möglichkeit, cross-browser-mit dem gleichen code. Feingliedrig ist ein cross-browser-Implementierung des DOM-Methoden für die Auswahl. Es ist gut getestet und macht diese viel weniger schmerzhaft. Ich weigere mich zu berühren, contenteditable, ohne es.
Finden Sie feingliedrige hier:
http://code.google.com/p/rangy/
Feingliedrig mit in Ihrem Projekt, Sie können immer schreiben, auch wenn der browser IE 8 oder älter und hat eine ganz andere native API für Selektionen:
Wo "contentEditableNode" ist die DOM-Knoten mit dem contenteditable Attribut. Könnten Sie Sie Holen wie diese:
Oder wenn jQuery ist Teil des Projekts bereits und Sie finden es bequem:
InformationsquelleAutor der Antwort Tom Boutell
Da alle vorhandenen Antworten befassen sich mit
div
Elemente, ich werde erklären, wie es zu tun mitspan
s.Gibt es einen feinen Unterschied, wenn die Auswahl einen Textbereich in einer
span
. Um zu können, geben Sie den text start-und Ende-index, Sie haben eineText
Knoten, wie beschrieben hier:InformationsquelleAutor der Antwort Domysee
[Aktualisiert zu beheben Fehler]
Hier ist ein Beispiel, das angepasst ist, von dieser Antwort, die scheint gut zu funktionieren, in Chrome - Wählen Sie die Option Bereich in contenteditable div
HTML ist:
InformationsquelleAutor der Antwort patorjk
contenteditable
ist nur ein Attribut, das ist, interpretiert vom browser. Sie können ändern, wie Elemente mit dem gewöhnlichen DOM-Funktionen.Sehen javascript TextRanges.
Btw, schnelle Suche, die in SO, gab mir paar Ergebnisse.
InformationsquelleAutor der Antwort Deele