document.createRange() 和 new Range() 有什么区别?

you*_*rrr 5 javascript dom range

在Javascript中,创建对象似乎有两种方法Range

  1. var range = document.createRange(): 调用createRange()一个Document对象。更多信息
  2. var range = new Range(): 使用Range()构造函数。更多信息

样式 #1 的 MDN 注释:

创建 Range 后,您需要先设置其边界点,然后才能使用其大部分方法。

风格 #2 的 MDN 说:

Range() 构造函数返回一个新创建的 Range 对象,其起点和终点是全局 Document 对象。

但这并不能完全告诉我两者之间有什么区别。

然而,在撰写本文时,MDN 顶部有一条关于样式 #2 的注释,内容如下:

这是一项实验技术

而且,重要的是,目前 IE 似乎还不支持创建Range对象的 style #2 语法。

除此之外,两者之间在创建方式Range或创建对象的任何一种方式返回的内容方面是否存在任何(细微的)差异Range

如果我误用了任何术语,请提前道歉——如果我误用了,请纠正我,因为我对这些概念还很陌生。

谢谢!

syn*_*gma 2

基于DOM标准W3C规范,两者之间没有区别(强调我的):

调用 createRange() 方法时,必须返回一个以 (this, 0) 作为起点和终点的新生存范围。

注意:可以使用 Range() 构造函数来代替。

事实上, 和 都document.createRange()返回new Range()一个对象并且startOffset设置endOffset为 0:

{
  collapsed: true,
  commonAncestorContainer: /* object of type document */,
  endContainer: /* object of type document */,
  endOffset: 0,
  startContainer: /* object of type document */,
  startOffset: 0
}
Run Code Online (Sandbox Code Playgroud)