1. 給開發者的 Web 技術文件
  2. Web API
  3. Document
  4. Document:execCommand() 方法

此頁面由社群從英文翻譯而來。了解更多並加入 MDN Web Docs 社群。

View in English Always switch to English

Document:execCommand() 方法

已棄用: 不推薦使用此功能。雖可能有一些瀏覽器仍然支援它,但也許已自相關的網頁標準中移除、正準備移除、或僅為了維持相容性而保留。避免使用此功能,盡可能更新現有程式;請參考頁面底部的相容性表格來下決定。請注意:本功能可能隨時停止運作。

execCommand 方法實現了多種不同的命令。其中一些提供對剪貼簿的存取,而其他則用於編輯表單輸入contenteditable 元素或整個文件(當切換到設計模式時)。

若要存取剪貼簿,建議使用較新的 Clipboard API 來取代 execCommand()。然而,對於編輯命令則沒有替代方案:與直接操作 DOM 不同,execCommand() 所執行的修改會保留撤銷緩衝區(編輯歷史)。

大多數命令會影響文件的選取範圍。例如,一些命令(粗體、斜體等)會格式化當前選取的文字,而其他命令則刪除選取範圍、插入新元素(取代選取範圍)或影響整行(縮排)。只有當前處於活動狀態的可編輯元素可以被修改,但某些命令(例如 copy)可以在沒有可編輯元素的情況下運作。

備註:execCommand() 所執行的修改可能會或可能不會觸發 beforeinputinput 事件,這取決於瀏覽器和配置。如果觸發,這些事件的處理器會在 execCommand() 回傳之前執行。作者需要注意這類遞迴呼叫,特別是在回應這些事件時呼叫 execCommand() 的情況下。從 Firefox 82 開始,巢狀的 execCommand() 呼叫將始終失敗,詳見 bug 1634262

語法

js
execCommand(aCommandName, aShowDefaultUI, aValueArgument)

參數

aCommandName

指定要執行的命令名稱的字串。以下命令被指定:

backColor

更改文件背景顏色。在 styleWithCss 模式下,它會改變包含區塊的背景顏色。這需要傳遞一個 <color> 值字串作為引數值。

bold

切換選取範圍或插入點的粗體開/關。

contentReadOnly

使內容文件變為唯讀或可編輯。這需要一個布林值 true/false 作為引數值。

copy

將當前選取範圍複製到剪貼簿。此行為的啟用條件因瀏覽器而異,並隨時間演變。請檢查相容性表以確定是否可以在你的情況下使用。

從選取範圍創建一個超連結,但僅在有選取範圍時才有效。需要一個 URI 字串作為超連結 href 的引數值。URI 必須至少包含一個字元,可以是空白字元。

cut

移除當前選取範圍並將其複製到剪貼簿。此行為的啟用時間因瀏覽器而異,其條件也隨時間演變。請檢查相容性表以獲取使用細節。

decreaseFontSize

在選取範圍或插入點周圍添加一個 <small> 標籤。

defaultParagraphSeparator

更改在可編輯文字區域中創建新段落時使用的段落分隔符。

delete

刪除當前選取範圍。

enableAbsolutePositionEditor

啟用或停用允許絕對定位元素移動的抓取器。從 Firefox 64 開始,抓取器預設為停用(Firefox bug 1490641)。

enableInlineTableEditing

啟用或停用表格列/欄插入和刪除控制項。從 Firefox 64 開始,控制項預設為停用(Firefox bug 1490641)。

enableObjectResizing

啟用或停用圖像、表格、絕對定位元素和其他可調整大小物件上的調整大小控制點。從 Firefox 64 開始,控制點預設為停用(Firefox bug 1490641)。

fontName

更改選取範圍或插入點的字體名稱。這需要一個字體名稱字串(例如 "Arial")作為引數值。

fontSize

更改選取範圍或插入點的字體大小。這需要一個從 17 的整數作為引數值。

foreColor

更改選取範圍或插入點的字體顏色。這需要一個十六進位顏色值字串作為引數值。

formatBlock

在包含當前選取範圍的行周圍添加一個 HTML 區塊級元素,若存在則替換包含該行的區塊元素(在 Firefox 中,<blockquote> 是例外——它會包裹任何包含的區塊元素)。需要一個標籤名稱字串作為引數值。幾乎所有區塊級元素都可以使用。(舊版 Edge 僅支援標題標籤 H1H6ADDRESSPRE,這些標籤必須用尖括號包裹,例如 "<H1>"。)

forwardDelete

刪除游標位置前的字元,與按下 Windows 鍵盤上的 Delete 鍵相同。

heading

在選取範圍或插入點行周圍添加一個標題元素。需要標籤名稱字串作為引數值(例如 "H1""H6")。(Safari 不支援。)

highlightColor

更改選取範圍或插入點的背景顏色。需要一個顏色值字串作為引數值。useCSS 必須為 true 才能運作。

increaseFontSize

在選取範圍或插入點周圍添加一個 <big> 標籤。

indent

縮排包含選取範圍或插入點的行。在 Firefox 中,如果選取範圍跨越多行且縮排層級不同,則僅會縮排選取範圍中縮排最少的行。

insertBrOnReturn

控制 Enter 鍵是插入 <br> 元素,還是將當前區塊元素分成兩個。

insertHorizontalRule

在插入點插入一個 <hr> 元素,或用它取代選取範圍。

insertHTML

在插入點插入一個 HTML 字串(刪除選取範圍)。需要一個有效的 HTML 字串作為引數值。

insertImage

在插入點插入一個圖像(刪除選取範圍)。需要一個圖像 src 的 URL 字串作為引數值。此字串的要求與 createLink 相同。

insertOrderedList

為選取範圍或插入點創建一個編號的有序列表

insertUnorderedList

為選取範圍或插入點創建一個帶點的無序列表

insertParagraph

在選取範圍或當前行周圍插入一個段落

insertText

在插入點插入給定的純文字(刪除選取範圍)。

italic

切換選取範圍或插入點的斜體開/關。

justifyCenter

將選取範圍或插入點置中。

justifyFull

將選取範圍或插入點對齊。

justifyLeft

將選取範圍或插入點向左對齊。

justifyRight

將選取範圍或插入點向右對齊。

outdent

凸排包含選取範圍或插入點的行。

paste

在插入點貼上剪貼簿內容(取代當前選取範圍)。對於 Web 內容不可用。

redo

重做上一個撤銷命令。

removeFormat

移除當前選取範圍的所有格式。

selectAll

選取可編輯區域的所有內容。

strikeThrough

切換選取範圍或插入點的刪除線開/關。

subscript

切換選取範圍或插入點的下標開/關。

superscript

切換選取範圍或插入點的上標開/關。

underline

切換選取範圍或插入點的底線開/關。

undo

撤銷最後執行的命令。

從選取的超連結中移除錨點元素

useCSS 已棄用

切換生成標記時使用 HTML 標籤或 CSS。需要一個布林值 true/false 作為引數值。

備註:此參數在邏輯上是反向的(即,使用 false 表示使用 CSS,使用 true 表示使用 HTML)。此功能已被 styleWithCSS 取代。

styleWithCSS

取代 useCSS 命令。true 修改/生成標記中的 style 屬性,false 生成展示用元素。

AutoUrlDetect

更改瀏覽器的自動連結行為。

aShowDefaultUI

一個布林值,指示是否應顯示預設的使用者介面。Mozilla 中未實作此功能。

aValueArgument

對於需要輸入引數的命令,是一個提供該資訊的字串。例如,insertImage 需要插入圖像的 URL。若不需要引數,請指定 null

回傳值

一個布林值,若命令不支援或已停用則為 false

備註:只有在作為使用者互動的一部分被呼叫時,document.execCommand() 才會回傳 true。你不能用它來在呼叫指令之前驗證瀏覽器是否支援該指令。

範例

如何使用 execCommand 與 contentEditable 元素的範例(CodePen)。

使用 insertText

此範例展示了兩個非常基本的 HTML 編輯器,一個使用 <textarea> 元素,另一個使用帶有 contenteditable 屬性的 <pre> 元素。

點擊「粗體」或「斜體」按鈕會在元素中插入相應的標籤,使用 insertText 來保留編輯歷史,因此使用者可以撤銷操作。

HTML

html
<h2>textarea</h2>
<div class="actions" data-for="textarea">
 <button data-el="b">粗體</button>
 <button data-el="i">斜體</button>
</div>
<textarea class="editarea">一些文字。</textarea>
<h2>contenteditable</h2>
<div class="actions" data-for="pre">
 <button data-el="b">粗體</button>
 <button data-el="i">斜體</button>
</div>
<pre contenteditable="true" class="editarea">一些文字。</pre>

JavaScript

js
// 準備操作按鈕
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),
 );
 }
}
// 在游標處插入文字,或取代選取的文字
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("捕獲的錯誤:", e);
 pasted = false;
 }
 if (!pasted) {
 console.error("貼上失敗,execCommand 不支援");
 }
}

結果

規範

This feature does not appear to be defined in any specification.

瀏覽器相容性

參見

Help improve MDN

Learn how to contribute

This page was last modified on by MDN contributors.

AltStyle によって変換されたページ (->オリジナル) /