MSSelection

非标准

该特性是非标准的,请尽量不要在生产环境中使用它!

IE Only

该属性是IE专有的。尽管IE很好地支持它,但大部分其它浏览器已经不支持该属性。该属性仅应在需兼容低版本IE时作为其中一种方案,而不是在跨浏览器的脚本中完全依赖它。

MSSelection 对象表示用户选择的文本范围或插入光标(Caret)的当前位置,类似于标准定义的 Selection 接口。它主要通过配套的 TextRange 接口进行操作。

该接口从IE4开始实现,但直到IE9时添加了对标准 Selection 接口的支持时,为了区分它才被命名为 MSSelection。可供修改和使用的 MSSelection 可通过 document.selection 属性获取,但是这在IE11被彻底移除。

注意,在非IE浏览器不支持该接口,可使用替代的标准 Selection 接口。

属性

MSSelection.type只读

返回选中区域的类型。

方法

MSSelection.empty()
取消当前选中区,将选中区类型设置为 none
MSSelection.clear()
清除选中区的内容,将选中区类型设置为 none。注意,该方法可以删除不可编辑的元素。
MSSelection.createRange()
在当前选中区上创建并返回一个 TextRange,其内容和当前选区一致。返回的区域在修改时不会直接作用到选区上,除非使用 TextRange.select() 方法。
MSSelection.createRangeCollection()
返回一个 TextRangeCollection,该集合包含选区中所有区域对应的 TextRange。注意该对象不是一个 Array,且IE中的Web网页不支持多个选区,因此它总是返回单个对象的集合。

示例

以下示例在IE10以下有效。该示例通过 document.selection 获取 MSSelection 对象,并清空选区中的内容。

var sel = document.selection;
sel.clear();

开发者笔记

使用 TextRange 操作选中区域

仅在IE9以下有效。在浏览器允许的情况下,应优先使用 Selection 接口。

document.selection 属性返回一个 MSSelection 对象,selection.createRange() 方法创建一个和当前选中区域一致的 TextRange 对象。

var sel = document.selection;
var range = sel.createRange();
alert(range.text);
// 输出被选区域的纯文本

注意,createRange 方法并不创建引用,如果希望通过该方法修改选中区域,则需要调用 TextRange.select 方法。

selection 兼容性

document.selection 属性返回当前文档的 MSSelection 对象。标准规定一个窗口/文档可能有多个不相邻选区,但只有Firefox实现通过 Ctrl 选中多个区域;IE中一般也只允许文档只存在一个被选中的 TextRange

然而,在其它浏览器中,document 并不存在一个所谓 selection 属性——它们通过标准 Selection API (en-US) 实现对选区的操作,也就是通过 window.getSelection() 方法获取 Selection 对象,并使用标准的 Range 对象对文本片段作出处理。IE11及之后的版本也放弃了 document.selection 对象而转为使用标准接口(尽管 TextRange 一直保留,但大多数情况下它已失去作用)。

这很容易引起迷惑。通常,如果脚本只要求兼容最新的浏览器,那么标准的接口是最佳的选择;但通常目前的网站仍希望兼容IE8或其以下的浏览器,因此,最好的做法是同时处理两者,也就是在不支持标准接口时尝试使用 MSSelection 方式,但不要把该方式作为唯一的选择。

浏览器兼容性

IE 其它浏览器
MSSelection This API has not been standardized. ≤10(IE9后应使用标准API) 不支持(详见Selection API (en-US)

扩展