Selection
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
* Some parts of this feature may have varying levels of support.
Ein Selection
-Objekt repräsentiert den Bereich des vom Benutzer ausgewählten Texts oder die aktuelle Position des Cursors. Jedes document
ist mit einem eindeutigen Auswahlobjekt verknüpft, das durch document.getSelection()
oder window.getSelection()
abgerufen und dann untersucht und geändert werden kann.
Ein Benutzer kann eine Auswahl von links nach rechts (in Dokumentreihenfolge) oder von rechts nach links (umgekehrte Dokumentreihenfolge) vornehmen. Der Anker ist der Punkt, an dem der Benutzer die Auswahl begonnen hat, und der Fokus ist der Punkt, an dem der Benutzer die Auswahl beendet. Wenn Sie eine Auswahl mit einer Desktop-Maus treffen, wird der Anker dort platziert, wo Sie die Maustaste gedrückt haben, und der Fokus dort, wo Sie die Maustaste losgelassen haben.
Hinweis: Anker und Fokus sollten nicht mit den Anfangs- und Endpositionen einer Auswahl verwechselt werden. Der Anker kann vor dem Fokus oder umgekehrt platziert werden, abhängig von der Richtung, in der Sie Ihre Auswahl getroffen haben.
Instanz-Eigenschaften
Selection.anchorNode
Schreibgeschützt-
Gibt den
Node
zurück, in dem die Auswahl beginnt. Kannnull
zurückgeben, wenn nie eine Auswahl im Dokument vorhanden war (z.B. ein iframe, auf das nie geklickt wurde). Selection.anchorOffset
Schreibgeschützt-
Gibt eine Zahl zurück, die den Versatz des Ankers der Auswahl innerhalb des
anchorNode
angibt. WennanchorNode
ein Textknoten ist, ist dies die Anzahl der Zeichen innerhalb vonanchorNode
vor dem Anker. WennanchorNode
ein Element ist, ist dies die Anzahl der Kindknoten desanchorNode
vor dem Anker. Selection.direction
Schreibgeschützt-
Ein String, der die Richtung der aktuellen Auswahl beschreibt.
Selection.focusNode
Schreibgeschützt-
Gibt den
Node
zurück, in dem die Auswahl endet. Kannnull
zurückgeben, wenn nie eine Auswahl im Dokument vorhanden war (zum Beispiel in einemiframe
, das nie angeklickt wurde). Selection.focusOffset
Schreibgeschützt-
Gibt eine Zahl zurück, die den Versatz des Fokus der Auswahl innerhalb des
focusNode
angibt. WennfocusNode
ein Textknoten ist, ist dies die Anzahl der Zeichen innerhalb vonfocusNode
vor dem Fokus. WennfocusNode
ein Element ist, ist dies die Anzahl der Kindknoten desfocusNode
vor dem Fokus. Selection.isCollapsed
Schreibgeschützt-
Gibt einen Boolean-Wert zurück, der angibt, ob die Start- und Endpunkte der Auswahl an derselben Position sind.
Selection.rangeCount
Schreibgeschützt-
Gibt die Anzahl der Bereiche in der Auswahl zurück.
Selection.type
Schreibgeschützt-
Gibt einen String zurück, der den Typ der aktuellen Auswahl beschreibt.
Instanz-Methoden
Selection.addRange()
-
Ein
Range
-Objekt, das zur Auswahl hinzugefügt wird. Selection.collapse()
-
Bricht die aktuelle Auswahl auf einen einzigen Punkt zusammen.
Selection.collapseToEnd()
-
Bricht die Auswahl am Ende des letzten Bereichs in der Auswahl zusammen.
Selection.collapseToStart()
-
Bricht die Auswahl am Anfang des ersten Bereichs in der Auswahl zusammen.
Selection.containsNode()
-
Gibt an, ob ein bestimmter Knoten Teil der Auswahl ist.
Selection.deleteFromDocument()
-
Löscht den Inhalt der Auswahl aus dem Dokument.
Selection.empty()
-
Entfernt alle Bereiche aus der Auswahl, sodass die
anchorNode
undfocusNode
-Eigenschaften gleichnull
sind und nichts ausgewählt ist. Selection.extend()
-
Verschiebt den Fokus der Auswahl an einen angegebenen Punkt.
Selection.getComposedRanges()
Experimentell-
Gibt ein Array von
StaticRange
-Objekten zurück, von denen jedes eine Auswahl darstellt, die DOM-Grenzen überschreiten könnte. Selection.getRangeAt()
-
Gibt ein
Range
-Objekt zurück, das einen der derzeit ausgewählten Bereiche repräsentiert. Selection.modify()
-
Ändert die aktuelle Auswahl.
Selection.removeRange()
-
Entfernt einen Bereich aus der Auswahl.
Selection.removeAllRanges()
-
Entfernt alle Bereiche aus der Auswahl.
Selection.selectAllChildren()
-
Fügt alle Kinder des angegebenen Knotens zur Auswahl hinzu.
Selection.setBaseAndExtent()
-
Setzt die Auswahl auf einen Bereich, der alle oder Teile von zwei angegebenen DOM-Knoten und alle dazwischen liegenden Inhalte umfasst.
Selection.setPosition()
-
Bricht die aktuelle Auswahl auf einen einzigen Punkt zusammen.
Selection.toString()
-
Gibt einen String zurück, der derzeit vom Auswahlobjekt repräsentiert wird, d.h. den aktuell ausgewählten Text.
Anmerkungen
String-Darstellung einer Auswahl
Das Aufrufen der Methode Selection.toString()
gibt den Text zurück, der innerhalb der Auswahl enthalten ist, z.B.:
const selObj = window.getSelection();
window.alert(selObj);
Beachten Sie, dass das Verwenden eines Auswahlobjekts als Argument für window.alert
die toString
-Methode des Objekts aufrufen wird.
Mehrere Bereiche in einer Auswahl
Ein Auswahlobjekt repräsentiert die vom Benutzer ausgewählten Range
s. In der Regel hält es nur einen Bereich, der wie folgt angesprochen wird:
const selObj = window.getSelection();
const range = selObj.getRangeAt(0);
selObj
ist ein Selection-Objektrange
ist einRange
-Objekt
Wie im Selection API specification notes festgehalten, wurde die Selection API ursprünglich von Netscape erstellt und erlaubte mehrere Bereiche (zum Beispiel, um dem Benutzer zu erlauben, eine Spalte aus einem <table>
auszuwählen). Andere Browser als Gecko haben jedoch keine Mehrfachbereichsunterstützung implementiert, und die Spezifikation verlangt auch, dass eine Auswahl immer nur einen Bereich haben sollte.
Auswahl und Eingabefokus
Auswahl und Eingabefokus (angezeigt durch Document.activeElement
) haben eine komplexe Beziehung, die je nach Browser variiert. In browserübergreifendem Code ist es besser, sie getrennt zu behandeln.
Safari und Chrome (im Gegensatz zu Firefox) fokussieren derzeit das Element, das die Auswahl enthält, wenn die Auswahl programmgesteuert geändert wird; es ist möglich, dass sich dies in Zukunft ändern wird (siehe W3C bug 14383 und WebKit bug 38696).
Verhalten der Selection API in Bezug auf Änderungen des Bearbeitungsfokus
Die Selection API hat ein gemeinsames Verhalten (d.h. von Browsern geteilt), das regelt, wie sich der Fokus für Bearbeitungs-Hosts nach dem Aufruf bestimmter Methoden ändert.
Das Verhalten ist wie folgt:
- Ein Bearbeitungshost erhält den Fokus, wenn die vorherige Auswahl außerhalb davon war.
- Eine Selection API-Methode wird aufgerufen, wodurch eine neue Auswahl mit dem Auswahlbereich innerhalb des Bearbeitungshosts getroffen wird.
- Der Fokus bewegt sich dann zum Bearbeitungshost.
Hinweis:
Die Methoden der Selection API können den Fokus nur auf einen Bearbeitungshost verschieben, nicht auf andere fokussierbare Elemente (z.B. <a>
).
Das oben beschriebene Verhalten gilt für Auswahlen, die mit den folgenden Methoden getroffen werden:
Selection.collapse()
Selection.collapseToStart()
Selection.collapseToEnd()
Selection.extend()
Selection.selectAllChildren()
Selection.addRange()
Selection.setBaseAndExtent()
Und wenn der Range
mit den folgenden Methoden modifiziert wird:
Glossar
Andere Schlüsselbegriffe, die in diesem Abschnitt verwendet werden.
- Anker
-
Der Anker einer Auswahl ist der Anfangspunkt der Auswahl. Wenn Sie eine Auswahl mit der Maus treffen, ist der Anker der Punkt im Dokument, an dem die Maustaste zuerst gedrückt wird. Wenn der Benutzer die Auswahl mithilfe der Maus oder der Tastatur ändert, bewegt sich der Anker nicht.
- Bearbeitungshost
-
Ein bearbeitbares Element (z.B. ein HTML-Element mit
contenteditable
gesetzt oder das HTML-Kind eines Dokuments, dessendesignMode
aktiviert ist). - Fokus einer Auswahl
-
Der Fokus einer Auswahl ist der Endpunkt der Auswahl. Wenn Sie eine Auswahl mit der Maus treffen, ist der Fokus der Punkt im Dokument, an dem die Maustaste losgelassen wird. Wenn der Benutzer die Auswahl mithilfe der Maus oder der Tastatur ändert, ist der Fokus das Ende der Auswahl, das sich bewegt.
Hinweis: Dies ist nicht dasselbe wie das fokussierte Element des Dokuments, das durch
document.activeElement
zurückgegeben wird. - Bereich
-
Ein Bereich ist ein zusammenhängender Teil eines Dokuments. Ein Bereich kann ganze Knoten sowie Teile von Knoten (wie z.B. einen Teil eines Textknotens) enthalten. Ein Benutzer wählt normalerweise nur einen einzelnen Bereich auf einmal aus, aber es ist möglich, dass ein Benutzer mehrere Bereiche auswählt (z.B. durch die Verwendung der Strg-Taste). Ein Bereich kann aus einer Auswahl als
range
-Objekt abgerufen werden. Bereichsobjekte können auch über das DOM erstellt und programmgesteuert zu einer Auswahl hinzugefügt oder aus dieser entfernt werden.
Spezifikationen
Specification |
---|
Selection API # selection-interface |
Browser-Kompatibilität
Siehe auch
Window.getSelection
,Document.getSelection
,Range
- Auswahlbezogene Ereignisse:
selectionchange
undselectstart
- HTML-Eingaben bieten einfachere Hilfe-APIs für die Arbeit mit Auswahl (siehe
HTMLInputElement.setSelectionRange()
) Document.activeElement
,HTMLElement.focus
undHTMLElement.blur