InputEvent:getTargetRanges() 方法

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.

InputEvent 接口的 getTargetRanges() 方法返回一个 StaticRange 对象数组,如果不取消输入事件,该数组受到 DOM 更改的影响。

这允许 web 应用程序在浏览器修改 DOM 树之前重写文本编辑行为,并提供更多控制输入事件的能力,以提高性能。

依据 inputType 值和当前的编辑宿主,此方法的返回值不同:

inputType 编辑宿主 getTargetRanges()的响应
"historyUndo""historyRedo" Any 空数组
剩余的所有值 contenteditable 一个与事件有关的 StaticRange 对象数组。
剩余的所有值 input 或者 textarea 一个空数组

语法

js
getTargetRanges()

参数

无。

返回值

一个 StaticRange 对象数组。

示例

特征检测

如果浏览器支持 beforeinputgetTargetRanges,则下面的函数会返回 true。

js
function isBeforeInputEventAvailable() {
  return (
    window.InputEvent &&
    typeof InputEvent.prototype.getTargetRanges === "function"
  );
}

基本用法

下面的示例选择一个 contenteditable 元素,利用 beforeinput 事件输出 getTargetRanges() 的结果。

js
const editableElem = document.querySelector('[contenteditable="true"]');

editableElem.addEventListener("beforeinput", (e) => {
  const targetRanges = e.getTargetRanges();
  console.log(targetRanges);
});

规范

Specification
Input Events Level 2
# dom-inputevent-gettargetranges

浏览器兼容性

BCD tables only load in the browser