MSSelection - Web API 接口参考 编辑
非标准
该特性是非标准的,请尽量不要在生产环境中使用它!
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 实现对选区的操作,也就是通过 window.getSelection()
方法获取 Selection
对象,并使用标准的 Range
对象对文本片段作出处理。IE11及之后的版本也放弃了 document.selection
对象而转为使用标准接口(尽管 TextRange
一直保留,但大多数情况下它已失去作用)。
这很容易引起迷惑。通常,如果脚本只要求兼容最新的浏览器,那么标准的接口是最佳的选择;但通常目前的网站仍希望兼容IE8或其以下的浏览器,因此,最好的做法是同时处理两者,也就是在不支持标准接口时尝试使用 MSSelection
方式,但不要把该方式作为唯一的选择。
浏览器兼容性
此页上的兼容性表是从结构化数据生成的。如果您想贡献数据,请访问 https://github.com/mdn/browser-compat-data 并向我们发送一个请求。IE | 其它浏览器 | |
---|---|---|
MSSelection | ≤10(IE9后应使用标准API) | 不支持(详见Selection API) |
扩展
TextRange
接口Selection
及Range
标准接口- Selection API 用于取代该非标准接口
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论