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

时间:2017-10-29 01:53:38

标签: javascript dom range

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

  1. var range = document.createRange():在createRange()对象上调用DocumentMore info
  2. var range = new Range():使用Range()构造函数。 More info
  3. 风格#1的MDN注意:

      

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

    风格#2的MDN说:

      

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

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

    然而,在这篇文章的时候,在风格#2的MDN上面有一条说明:

      

    这是一项实验技术

    而且,重要的是,目前看来IE还不支持样式#2创建Range对象的语法。

    除此之外,两者之间是否有任何(细微的)差异,无论是Range如何创建,还是通过这两种创建Range对象的方式返回的内容?

    如果我误用了任何条款,请提前道歉 - 如果我有,请纠正我,因为我对这些概念还不熟悉。

    谢谢!

1 个答案:

答案 0 :(得分:1)

基于DOM Standard W3C specification,两者之间没有区别(强调我):

createRange()方法在被调用时必须返回一个以(this,0)为开始的新有效范围。

注意:可以改用Range()构造函数。

实际上document.createRange()new Range()都返回一个startOffsetendOffset设置为0的对象:

{
  collapsed: true,
  commonAncestorContainer: /* object of type document */,
  endContainer: /* object of type document */,
  endOffset: 0,
  startContainer: /* object of type document */,
  startOffset: 0
}