EditContext:updateText() 方法

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

EditContext 介面的 updateText() 方法會更新 EditContext 物件的內部文字內容。

當用戶在關聯元素中輸入文字時,不需要使用此方法。EditContext 物件將自動更新其內部文字內容,並根據需要觸發 textupdate 事件。

但是,當用戶以其他方式與文字內容進行互動時,可以使用此方法,例如從剪貼簿貼上文字時。

語法

js
updateText(rangeStart, rangeEnd, text)

引數

rangeStart

一個數字,表示要替換的文字範圍的起始位置。

rangeEnd

一個數字,表示要替換的文字範圍的結束位置。

文字

一個字串,表示新的文字內容。

返回值

無 (undefined)。

異常

TypeError

如果呼叫此方法時提供的引數少於三個,則會丟擲此異常。

示例

在使用者貼上文字時更新編輯器

此示例展示瞭如何在使用者按下 Ctrl/Cmd + V 快捷鍵貼上文字時,使用 updateText 方法更新 <canvas> 元素的 EditContext 中的文字內容。

該示例還使用了 Clipboard.readText() 方法從剪貼簿讀取文字。

html
<canvas id="editor-canvas"></canvas>
js
const canvas = document.getElementById("editor-canvas");
const ctx = canvas.getContext("2d");

const editContext = new EditContext();
canvas.editContext = editContext;

function render() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.fillText(editContext.text, 0, 40);
}

editContext.addEventListener("textupdate", (e) => {
  render();
});

canvas.addEventListener("keydown", async (e) => {
  if (e.key === "v" && (e.ctrlKey || e.metaKey)) {
    const pastedText = await navigator.clipboard.readText();
    console.log(
      `The user pasted the text: ${pastedText}. Updating the EditContext text.`,
    );

    editContext.updateText(
      editContext.selectionStart,
      editContext.selectionEnd,
      pastedText,
    );

    editContext.updateSelection(
      editContext.selectionStart + pastedText.length,
      editContext.selectionStart + pastedText.length,
    );

    render();
  }
});

規範

規範
EditContext API
# dom-editcontext-updatetext

瀏覽器相容性

另見