Auswahl
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2017.
* 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 des Cursors. 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 (umgekehrte Dokumentenreihenfolge) treffen. Der Anker ist der Punkt, an dem die Auswahl begonnen wurde, und der Fokus ist der Punkt, an dem die Auswahl endet. Wenn Sie mit einer Desktop-Maus eine Auswahl 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 Start- und Ende-Positionen einer Auswahl verwechselt werden. Der Anker kann vor dem Fokus platziert werden oder umgekehrt, 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 die Auswahl nie im Dokument vorhanden war (z. B. einiframe
, in das nie geklickt 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 inanchorNode
, die dem Anker vorausgehen. WennanchorNode
ein Element ist, ist dies die Anzahl der Kindknoten desanchorNode
, die dem Anker vorausgehen. 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 die Auswahl nie im Dokument vorhanden war (zum Beispiel in einemiframe
, in das nie geklickt 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 infocusNode
, 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 Boolean-Wert zurück, der angibt, ob die Anfangs- 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 der Auswahl hinzugefügt wird. Selection.collapse()
-
Kollabiert die aktuelle Auswahl auf einen einzelnen Punkt.
Selection.collapseToEnd()
-
Kollabiert die Auswahl bis zum Ende des letzten Bereichs in der Auswahl.
Selection.collapseToStart()
-
Kollabiert die Auswahl bis 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, wobei die Eigenschaften
anchorNode
undfocusNode
gleichnull
bleiben 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 Grenzen des Shadow DOM überschreiten kann. Selection.getRangeAt()
-
Gibt ein
Range
-Objekt zurück, das einen der aktuell ausgewählten Bereiche darstellt. 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 aller dazwischen befindlichen Inhalte umfasst.
Selection.setPosition()
-
Kollabiert die aktuelle Auswahl auf einen einzelnen Punkt.
Selection.toString()
-
Gibt einen String zurück, der derzeit vom Auswahlobjekt dargestellt wird, d.h. den aktuell ausgewählten Text.
Anmerkungen
String-Darstellung einer Auswahl
Das Aufrufen der Methode Selection.toString()
gibt den Text innerhalb der Auswahl zurück, 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 vom Benutzer ausgewählten Range
s. Typischerweise enthält es nur einen Bereich, der wie folgt abgerufen wird:
const selObj = window.getSelection();
const range = selObj.getRangeAt(0);
selObj
ist ein Selection-Objektrange
ist einRange
-Objekt
Wie in der Spezifikation der 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 einem <table>
auszuwählen). Allerdings implementierten andere Browser außer Gecko keine Mehrfachbereiche, und die Spezifikation erfordert auch, dass die Auswahl immer nur einen Bereich hat.
Auswahl und Eingabefokus
Auswahl und Eingabefokus (angezeigt durch Document.activeElement
) haben eine komplexe Beziehung, die je nach Browser variiert. In kompatiblem Code für mehrere Browser 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 besteht die Möglichkeit, dass sich dies in Zukunft ändern kann (siehe W3C Bug 14383 und WebKit Bug 38696).
Verhalten der Selection API in Bezug auf Fokusänderungen bei Bearbeitungshosts
Die Selection API hat ein gemeinsames Verhalten (d. h. zwischen Browsern geteilt), das festlegt, wie sich das Fokusverhalten für Bearbeitungshosts ändert, nachdem bestimmte Methoden aufgerufen wurden.
Das Verhalten ist wie folgt:
- Ein Bearbeitungshost erhält den Fokus, wenn die vorherige Auswahl außerhalb von ihm war.
- Eine Methode der Selection API wird aufgerufen, wodurch eine neue Auswahl im Bearbeitungshost vorgenommen wird.
- Der Fokus wird dann auf den Bearbeitungshost verschoben.
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 wichtige Begriffe, die in diesem Abschnitt verwendet werden.
- Anker
-
Der Anker einer Auswahl ist der Anfangspunkt der Auswahl. Wenn eine Auswahl mit der Maus getroffen wird, ist der Anker der Punkt im Dokument, an dem die Maustaste zuerst gedrückt wird. Während der Benutzer die Auswahl mit der Maus oder der Tastatur ändert, bewegt sich der Anker nicht.
- Bearbeitungshost
-
Ein bearbeitbares Element (z. B. ein HTML-Element mit aktivierter
contenteditable
-Eigenschaft oder das HTML-Kind eines Dokuments mit aktiviertemdesignMode
). - Fokus einer Auswahl
-
Der Fokus einer Auswahl ist der Endpunkt der Auswahl. Wenn eine Auswahl mit der Maus getroffen wird, ist der Fokus der Punkt im Dokument, an dem die Maustaste losgelassen wird. Während 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, wie es von
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 ein Teil eines Textknotens) enthalten. Normalerweise wird ein Benutzer nur einen Bereich auf einmal auswählen, aber es ist möglich, dass ein Benutzer mehrere Bereiche auswählt (z. B. durch Verwendung der Steuerung-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
BCD tables only load in the browser
Siehe auch
Window.getSelection
,Document.getSelection
,Range
- Auswahlbezogene Ereignisse:
selectionchange
undselectstart
- HTML-Eingaben bieten einfachere Hilfs-APIs zum Arbeiten mit Auswahlen (siehe
HTMLInputElement.setSelectionRange()
) Document.activeElement
,HTMLElement.focus
undHTMLElement.blur