Auswahl
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 vom Benutzer ausgewählten Textbereich oder die aktuelle Position der Einfügemarke. Jedes document
ist mit einem eindeutigen Auswahlobjekt verknüpft, das durch document.getSelection()
oder window.getSelection()
abgerufen und dann untersucht und modifiziert werden kann.
Ein Benutzer kann eine Auswahl von links nach rechts (in Dokumentenreihenfolge) oder von rechts nach links (entgegen der Dokumentenreihenfolge) 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 mit einer Desktop-Maus eine Auswahl treffen, wird der Anker an der Stelle platziert, an der Sie die Maustaste gedrückt haben, und der Fokus an der Stelle, an der Sie die Maustaste losgelassen haben.
Note: Anker und Fokus sollten nicht mit den Start- und End-Positionen 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.
Instanzeigenschaften
Selection.anchorNode
Schreibgeschützt-
Gibt den
Node
zurück, in dem die Auswahl beginnt. Kannnull
zurückgeben, wenn die Auswahl nie im Dokument vorhanden war (z. B. ein iframe, das nie angeklickt wurde). Selection.anchorOffset
Schreibgeschützt-
Gibt eine Zahl zurück, die den Versatz des Ankers der Auswahl innerhalb des
anchorNode
darstellt. WennanchorNode
ein Textknoten ist, ist dies die Anzahl der Zeichen innerhalb des AnchorNode, die dem Anker vorausgehen. WennanchorNode
ein Element ist, ist dies die Anzahl der Kindknoten desanchorNode
, die dem Anker vorausgehen. Selection.direction
Schreibgeschützt-
Ein Zeichenfolgenwert, 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 die Auswahl nie im Dokument vorhanden war (z. B. ein iframe, das nie angeklickt wurde). Selection.focusOffset
Schreibgeschützt-
Gibt eine Zahl zurück, die den Versatz des Fokus der Auswahl innerhalb des
focusNode
darstellt. WennfocusNode
ein Textknoten ist, ist dies die Anzahl der Zeichen innerhalb desfocusNode
, die dem Fokus vorausgehen. WennfocusNode
ein Element ist, ist dies die Anzahl der Kindknoten desfocusNode
, die dem Fokus vorausgehen. Selection.isCollapsed
Schreibgeschützt-
Gibt einen Booleschen Wert zurück, der angibt, ob die Start- und Endpunkte der Auswahl an der gleichen Position sind.
Selection.rangeCount
Schreibgeschützt-
Gibt die Anzahl der Bereiche in der Auswahl zurück.
Selection.type
Schreibgeschützt-
Gibt eine Zeichenfolge zurück, die die Art der aktuellen Auswahl beschreibt.
Instanzmethoden
Selection.addRange()
-
Ein
Range
-Objekt, das der Auswahl hinzugefügt wird. Selection.collapse()
-
Kollabiert die aktuelle Auswahl zu einem einzigen Punkt.
Selection.collapseToEnd()
-
Kollabiert die Auswahl zum Ende des letzten Bereichs in der Auswahl.
Selection.collapseToStart()
-
Kollabiert die Auswahl zum Anfang des ersten Bereichs in der Auswahl.
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 und setzt die Eigenschaften
anchorNode
undfocusNode
aufnull
, sodass nichts ausgewählt ist. Selection.extend()
-
Bewegt den Fokus der Auswahl zu einem bestimmten Punkt.
Selection.getComposedRanges()
-
Gibt ein Array von
StaticRange
-Objekten zurück, von denen jedes eine Auswahl darstellt, die auch DOM-Schatten-Grenzen überschreiten kann. Selection.getRangeAt()
-
Gibt ein
Range
-Objekt zurück, das einen der aktuell 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 der Auswahl alle Kinder des angegebenen Knotens hinzu.
Selection.setBaseAndExtent()
-
Setzt die Auswahl auf einen Bereich, der alle oder Teile von zwei angegebenen DOM-Knoten sowie alle dazwischen liegenden Inhalte umfasst.
Selection.setPosition()
-
Kollabiert die aktuelle Auswahl zu einem einzigen Punkt.
Selection.toString()
-
Gibt eine Zeichenfolge zurück, die derzeit vom Auswahlobjekt repräsentiert wird, also den aktuell ausgewählten Text.
Hinweise
Zeichenfolgenrepräsentation einer Auswahl
Das Aufrufen der Selection.toString()
-Methode gibt den Text zurück, der sich innerhalb der Auswahl befindet, z.B.:
const selObj = window.getSelection();
window.alert(selObj);
Beachten Sie, dass die Verwendung eines Auswahlobjekts als Argument für window.alert
die toString
-Methode des Objekts aufruft.
Mehrere Bereiche in einer Auswahl
Ein Auswahlobjekt repräsentiert die Range
s, die der Benutzer ausgewählt hat. In der Regel enthält es nur einen Bereich, der wie folgt abgerufen werden kann:
const selObj = window.getSelection();
const range = selObj.getRangeAt(0);
selObj
ist ein Selection-Objektrange
ist einRange
-Objekt
Wie in den Speziellen Anmerkungen zur Selection API angemerkt, wurde die Selection API ursprünglich von Netscape erstellt und erlaubte mehrere Bereiche (zum Beispiel, um dem Benutzer zu ermöglichen, eine Spalte aus einer <table>
auszuwählen). Allerdings haben andere Browser als Gecko keine mehrfachen Bereiche implementiert, und die Spezifikation verlangt auch, dass die Auswahl immer nur einen Bereich haben soll.
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 separat 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 könnte (siehe W3C-Fehler 14383 und WebKit-Fehler 38696).
Verhalten der Selection API in Bezug auf Fokusänderungen bei Editierhosts
Die Selection API weist ein gemeinsames Verhalten auf (d.h. zwischen den Browsern geteilt), das bestimmt, wie sich das Fokusverhalten für Editierhosts nach dem Aufrufen bestimmter Methoden ändert.
Das Verhalten ist wie folgt:
- Ein Editierhost 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 Editierhosts erstellt wird.
- Der Fokus bewegt sich dann zum Editierhost.
Hinweis:
Die Selection-API-Methoden können den Fokus nur auf einen Editierhost verschieben, nicht auf andere fokussierbare Elemente (z.B. <a>
).
Das oben genannte 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 folgenden Methoden modifiziert wird:
Glossar
Andere wichtige Begriffe, die in diesem Abschnitt verwendet werden.
- Anker
-
Der Anker einer Auswahl ist der Beginn der Auswahl. Beim Erstellen einer Auswahl mit einer Maus ist der Anker der Punkt im Dokument, an dem die Maustaste zuerst gedrückt wird. Wenn der Benutzer die Auswahl mit der Maus oder der Tastatur ändert, bewegt sich der Anker nicht.
- Editierhost
-
Ein bearbeitbares Element (z.B. ein HTML-Element mit gesetztem
contenteditable
oder das HTML-Kind eines Dokuments, dasdesignMode
aktiviert hat). - Fokus einer Auswahl
-
Der Fokus einer Auswahl ist der Endpunkt der Auswahl. Beim Erstellen einer Auswahl mit einer Maus ist der Fokus der Punkt im Dokument, an dem die Maustaste losgelassen wird. Wenn der Benutzer die Auswahl mit 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 einen Teil eines Textknotens) enthalten. Normalerweise wählt ein Benutzer nur einen Bereich gleichzeitig aus, aber es ist möglich, dass ein Benutzer mehrere Bereiche auswählt (z.B. durch 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 daraus 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 Hilfs-APIs zur Bearbeitung der Auswahl (siehe
HTMLInputElement.setSelectionRange()
) Document.activeElement
,HTMLElement.focus
, undHTMLElement.blur