Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Dokument: execCommand() Methode

Veraltet: Diese Funktion wird nicht mehr empfohlen. Obwohl einige Browser sie möglicherweise noch unterstützen, könnte sie bereits aus den relevanten Webstandards entfernt worden sein, in Kürze entfernt werden oder nur noch aus Kompatibilitätsgründen bestehen. Vermeiden Sie die Verwendung und aktualisieren Sie vorhandenen Code, falls möglich; siehe die Kompatibilitätstabelle am Ende dieser Seite, um Ihre Entscheidung zu unterstützen. Beachten Sie, dass diese Funktion jederzeit aufhören könnte zu funktionieren.

Nicht standardisiert: Diese Funktion ist nicht standardisiert. Wir raten davon ab, nicht-standardisierte Funktionen auf produktiven Webseiten zu verwenden, da sie nur von bestimmten Browsern unterstützt werden und sich in Zukunft ändern oder entfernt werden können. Unter Umständen kann sie jedoch eine geeignete Option sein, wenn es keine standardisierte Alternative gibt.

Hinweis: Obwohl die execCommand() Methode veraltet ist, gibt es immer noch einige gültige Anwendungsfälle, für die es derzeit keine praktikablen Alternativen gibt. Zum Beispiel bleiben im Gegensatz zur direkten DOM-Manipulation die Änderungen, die durch execCommand() vorgenommen werden, im Rückgängig-Speicher (Bearbeitungshistorie) erhalten. Für diese Anwendungsfälle können Sie diese Methode weiterhin verwenden, sollten jedoch die Kompatibilität zwischen Browsern testen, z.B. durch Verwendung von document.queryCommandSupported().

Die execCommand Methode implementiert mehrere verschiedene Befehle. Einige davon ermöglichen den Zugriff auf die Zwischenablage, während andere für die Bearbeitung von Formulareingaben, contenteditable Elementen oder ganzen Dokumenten (im Design-Modus) vorgesehen sind.

Um auf die Zwischenablage zuzugreifen, wird die neuere Clipboard API gegenüber execCommand() empfohlen.

Die meisten Befehle beeinflussen die Auswahl im Dokument. Beispielsweise formatieren einige Befehle (fett, kursiv usw.) den aktuell ausgewählten Text, während andere die Auswahl löschen, neue Elemente einfügen (die Auswahl ersetzen) oder eine ganze Zeile betreffen (Einzug). Nur das aktuell aktive bearbeitbare Element kann modifiziert werden, aber einige Befehle (z.B. copy) können ohne ein bearbeitbares Element funktionieren.

Hinweis: Änderungen, die durch execCommand() vorgenommen werden, können die Ereignisse beforeinput und input auslösen, abhängig vom Browser und dessen Konfiguration. Wenn sie ausgelöst werden, werden die Event-Handler ausgeführt, bevor execCommand() zurückkehrt. Entwickler müssen bei solchen rekursiven Aufrufen vorsichtig sein, insbesondere wenn sie execCommand() als Reaktion auf diese Ereignisse aufrufen. Ab Firefox 82 schlagen verschachtelte execCommand() Aufrufe immer fehl, siehe Bug 1634262.

Syntax

js
execCommand(commandName, showDefaultUI, valueArgument)

Parameter

commandName

Ein String, der den Namen des auszuführenden Befehls angibt. Die folgenden Befehle sind spezifiziert:

backColor

Ändert die Hintergrundfarbe des Dokuments. Im styleWithCss Modus betrifft es stattdessen die Hintergrundfarbe des enthaltenden Blocks. Dies erfordert, dass ein <color> Wert-String als Wertargument übergeben wird.

bold

Schaltet die Fettschrift für die Auswahl oder an der Einfügestelle ein/aus.

contentReadOnly

Macht das Dokument entweder schreibgeschützt oder bearbeitbar. Dies erfordert einen Boolean true/false als Wertargument.

copy

Kopiert die aktuelle Auswahl in die Zwischenablage. Die Bedingungen, unter denen dieses Verhalten aktiviert ist, variieren je nach Browser und haben sich im Laufe der Zeit entwickelt. Überprüfen Sie die Kompatibilitätstabelle, um festzustellen, ob Sie es in Ihrem Fall verwenden können.

Erstellt einen Hyperlink aus der Auswahl, aber nur, wenn eine Auswahl vorhanden ist. Erfordert einen URI String als Wertargument für das href des Hyperlinks. Der URI muss mindestens ein Zeichen enthalten, das Leerzeichen sein kann.

cut

Entfernt die aktuelle Auswahl und kopiert sie in die Zwischenablage. Wann dieses Verhalten aktiviert ist, variiert zwischen den Browsern, und die Bedingungen haben sich im Laufe der Zeit entwickelt. Überprüfen Sie die Kompatibilitätstabelle für Nutzungshinweise.

decreaseFontSize

Fügt ein <small> Tag um die Auswahl oder an der Einfügestelle hinzu.

defaultParagraphSeparator

Ändert den Absatztrenner, der verwendet wird, wenn neue Absätze in bearbeitbaren Textbereichen erstellt werden.

delete

Löscht die aktuelle Auswahl.

enableAbsolutePositionEditor

Aktiviert oder deaktiviert den Greifer, der es erlaubt, absolut positionierte Elemente zu verschieben. Der Greifer ist standardmäßig deaktiviert seit Firefox 64 (Firefox Bug 1490641).

enableInlineTableEditing

Aktiviert oder deaktiviert die Steuerungen zum Einfügen und Löschen von Tabellenspalten/-zeilen. Die Steuerungen sind standardmäßig deaktiviert seit Firefox 64 (Firefox Bug 1490641).

enableObjectResizing

Aktiviert oder deaktiviert die Größenänderungsgriffe an Bildern, Tabellen und absolut positionierten Elementen und anderen veränderbaren Objekten. Die Griffe sind standardmäßig deaktiviert seit Firefox 64 (Firefox Bug 1490641).

fontName

Ändert den Schriftartnamen für die Auswahl oder an der Einfügestelle. Dies erfordert einen Schriftartnamen-String (wie "Arial") als Wertargument.

fontSize

Ändert die Schriftgröße für die Auswahl oder an der Einfügestelle. Dies erfordert eine Ganzzahl von 1 - 7 als Wertargument.

foreColor

Ändert die Schriftfarbe für die Auswahl oder an der Einfügestelle. Dies erfordert einen hexadezimalen Farbwert-String als Wertargument.

formatBlock

Fügt ein HTML-Blockelement um die Zeile hinzu, die die aktuelle Auswahl enthält, und ersetzt das Blockelement, das die Zeile enthält, falls vorhanden (in Firefox ist <blockquote> die Ausnahme - es wird jedes enthaltende Blockelement umschließen). Erfordert einen Tag-Namen-String als Wertargument. Praktisch alle Blockelemente können verwendet werden. (Legacy Edge unterstützt nur Überschriftstags H1H6, ADDRESS und PRE, die in spitze Klammern eingeschlossen sein müssen, wie "<H1>".)

forwardDelete

Löscht das Zeichen vor der Position des Cursors, identisch mit dem Drücken der Entf-Taste auf einer Windows-Tastatur.

heading

Fügt ein Überschriftselement um eine Auswahl oder Einfügestellenlinie hinzu. Erfordert den Tag-Namen-String als Wertargument (d.h. "H1", "H6"). (Nicht unterstützt von Safari.)

hiliteColor

Ändert die Hintergrundfarbe für die Auswahl oder an der Einfügestelle. Erfordert einen Farbwert-String als Wertargument. useCSS muss true sein, damit dies funktioniert.

increaseFontSize

Fügt ein <big> Tag um die Auswahl oder an der Einfügestelle hinzu.

indent

Einzieht die Zeile, die die Auswahl oder Einfügestelle enthält. In Firefox, wenn die Auswahl mehrere Zeilen auf verschiedenen Einzugsstufen umfasst, werden nur die am wenigsten eingezogenen Zeilen in der Auswahl eingezogen.

insertBrOnReturn

Legt fest, ob die Eingabetaste ein <br> Element einfügt oder das aktuelle Blockelement in zwei teilt.

insertHorizontalRule

Fügt ein <hr> Element an der Einfügestelle ein oder ersetzt die Auswahl damit.

insertHTML

Fügt eine TrustedHTML Instanz oder einen String von HTML-Markup an der Einfügestelle ein (löscht Auswahl). Dies erfordert gültiges HTML-Markup.

Warnung: Die Eingabe wird als HTML geparst und in das DOM geschrieben. Solche APIs sind als Injektionsempfänger bekannt und potenziell ein Vektor für Cross-Site Scripting (XSS) Angriffe, wenn die Eingabe ursprünglich von einem Angreifer stammt.

Sie können dieses Risiko mindern, indem Sie immer TrustedHTML Objekte anstelle von Strings zuweisen und vertrauenswürdige Typen erzwingen. Weitere Informationen finden Sie in der Trusted Types API.

insertImage

Fügt ein Bild an der Einfügestelle ein (löscht Auswahl). Erfordert einen URL-String für das src des Bildes als Wertargument. Die Anforderungen für diesen String sind die gleichen wie bei createLink.

insertLineBreak

Löscht die Auswahl und ersetzt sie durch ein Zeilenumbruch-Element.

insertOrderedList

Erstellt eine nummerierte geordnete Liste für die Auswahl oder an der Einfügestelle.

insertUnorderedList

Erstellt eine punktierte ungeordnete Liste für die Auswahl oder an der Einfügestelle.

insertParagraph

Fügt einen Absatz um die Auswahl oder die aktuelle Zeile hinzu.

insertText

Fügt den angegebenen einfachen Text an der Einfügestelle ein (löscht Auswahl).

italic

Schaltet Kursivschrift für die Auswahl oder an der Einfügestelle ein/aus.

justifyCenter

Zentriert die Auswahl oder Einfügestelle.

justifyFull

Blocksatz für die Auswahl oder Einfügestelle.

justifyLeft

Linksbündiger Blocksatz für die Auswahl oder Einfügestelle.

justifyRight

Rechtbündiger Blocksatz für die Auswahl oder die Einfügestelle.

outdent

Verringert den Einzug der Zeile, die die Auswahl oder Einfügestelle enthält.

paste

Fügt den Inhalt der Zwischenablage an der Einfügestelle ein (ersetzt die aktuelle Auswahl).

Diese Funktion ist für Web-Inhalte als deaktiviert angegeben, wurde jedoch auf einigen Browsern über die Clipboard API implementiert. Auf diesen Browsern erfordert die Funktion transiente Aktivierung und die Bestätigung einer Popup-Benutzeroberfläche beim Einfügen von Inhalten aus anderen Quellen. Weitere Informationen finden Sie in der Browser-Kompatibilitätstabelle.

redo

Wiederholt den letzten Rückgängig-Befehl.

removeFormat

Entfernt alle Formatierungen aus der aktuellen Auswahl.

selectAll

Wählt den gesamten Inhalt des bearbeitbaren Bereichs aus.

strikeThrough

Schaltet den Durchstreichen-Effekt für die Auswahl oder an der Einfügestelle ein/aus.

subscript

Schaltet Tiefgestellt für die Auswahl oder an der Einfügestelle ein/aus.

superscript

Schaltet Hochgestellt für die Auswahl oder an der Einfügestelle ein/aus.

underline

Schaltet Unterstreichen für die Auswahl oder an der Einfügestelle ein/aus.

undo

Macht den zuletzt ausgeführten Befehl rückgängig.

Entfernt das Ankerelement aus einem ausgewählten Hyperlink.

useCSS

Schaltet die Verwendung von HTML-Tags oder CSS für das generierte Markup um. Erfordert einen Boolean true/false als Wertargument.

Hinweis: Dieses Argument ist logisch rückwärts (d.h. verwenden Sie false, um CSS zu verwenden, true, um HTML zu verwenden). Dies wurde zugunsten von styleWithCSS als veraltet markiert.

styleWithCSS

Ersetzt den useCSS Befehl. true modifiziert/generiert style Attribute im Markup, false erzeugt präsentationale Elemente.

AutoUrlDetect

Ändert das automatische Linkverhalten des Browsers.

showDefaultUI

Ein Boolean-Wert, der angibt, ob die Standard-Benutzeroberfläche angezeigt werden soll. Dies ist in Mozilla nicht implementiert.

valueArgument

Für Befehle, die ein Eingabeargument erfordern, ist ein String, der diese Information bereitstellt. Zum Beispiel erfordert insertImage die URL des einzufügenden Bildes. Geben Sie null an, wenn kein Argument benötigt wird.

Rückgabewert

Ein Boolean-Wert, der false ist, wenn der Befehl nicht unterstützt oder deaktiviert ist.

Hinweis: document.execCommand() gibt nur dann true zurück, wenn es als Teil einer Benutzerinteraktion aufgerufen wird. Sie können es nicht verwenden, um die Browserunterstützung vor dem Aufrufen eines Befehls zu überprüfen.

Beispiele

Verwendung von insertText

Dieses Beispiel zeigt zwei sehr grundlegende HTML-Editoren, einen, der ein <textarea> Element verwendet, und einen, der ein <pre> Element mit dem contenteditable Attribut verwendet.

Das Klicken auf die Schaltflächen "Bold" oder "Italic" fügt die entsprechenden Tags in das Element ein, wobei insertText verwendet wird, um die Bearbeitungshistorie zu erhalten, sodass der Benutzer die Aktion rückgängig machen kann.

HTML

html
<h2>textarea</h2>

<div class="actions" data-for="textarea">
  <button data-el="b">Bold</button>
  <button data-el="i">Italic</button>
</div>

<textarea class="editarea">Some text.</textarea>

<h2>contenteditable</h2>

<div class="actions" data-for="pre">
  <button data-el="b">Bold</button>
  <button data-el="i">Italic</button>
</div>

<pre contenteditable="true" class="editarea">Some text.</pre>

JavaScript

js
// Prepare action buttons
const buttonContainers = document.querySelectorAll(".actions");

for (const buttonContainer of buttonContainers) {
  const buttons = buttonContainer.querySelectorAll("button");
  const pasteTarget = buttonContainer.getAttribute("data-for");

  for (const button of buttons) {
    const elementName = button.getAttribute("data-el");
    button.addEventListener("click", () =>
      insertText(`<${elementName}></${elementName}>`, pasteTarget),
    );
  }
}

// Inserts text at cursor, or replaces selected text
function insertText(newText, selector) {
  const textarea = document.querySelector(selector);
  textarea.focus();

  let pasted = true;
  try {
    if (!document.execCommand("insertText", false, newText)) {
      pasted = false;
    }
  } catch (e) {
    console.error("error caught:", e);
    pasted = false;
  }

  if (!pasted) {
    console.error("paste unsuccessful, execCommand not supported");
  }
}

Ergebnis

Verwendung von paste

Dieses Beispiel enthält ein <textarea> Element und ein <button> Element, das Sie verwenden können, um Inhalte darin einzufügen.

HTML

html
<button id="paste">Paste</button>
<hr />
<textarea id="text_box">Some text.</textarea>

JavaScript

js
const pasteButton = document.querySelector("#paste");
const textBox = document.querySelector("#text_box");

pasteButton.addEventListener("click", () => {
  textBox.focus();

  let pasted = document.execCommand("paste", false);
  if (!pasted) {
    textBox.textContent = "paste unsuccessful, execCommand not supported";
  }
});

Ergebnis

In Browsern, die diese Funktion mit der Clipboard API implementieren, sollten Sie in der Lage sein, gleichartige Inhalte wie Text aus dem Textbereich zu kopieren und dann einzufügen, um jeglichen ausgewählten Inhalt zu ersetzen. Wenn Sie versuchen, Inhalte aus anderen Quellen einzufügen, z.B. Text, der von einer anderen Seite oder einem anderen Ort kopiert wurde, müssen Sie zuerst die im Popup angezeigte Benutzeroberfläche "Paste" auswählen.

Spezifikationen

Diese Funktion ist Teil keiner aktuellen Spezifikation. Sie ist nicht mehr vorgesehen, um ein Standard zu werden. Es gibt einen inoffiziellen W3C execCommand Spezifikationsentwurf.

Browser-Kompatibilität

Siehe auch