我正在尝试在文本中创建一个从右到左的选择,但似乎DOM Range API不允许我这样做。 (我在规范中没有看到任何关于这一点 - 不是我仔细阅读它 - 但所有实现似乎同意不支持它。)
例如,给出一个非常小的文档:
data:text/html,<div> this is a test </div>
我可以使用此脚本启用编辑并创建正常选择(例如从书签中添加,但为了清晰起见添加了换行符):
javascript:document.designMode='on';
var r=document.createRange(),d=document.getElementsByTagName('div')[0];
r.setStart(d.firstChild, 3);
r.setEnd(d.firstChild, 7);
window.getSelection().addRange(r); void(0);
但是,如果我交换3和7,则不会创建任何选择。
有没有人知道这样做的方法?
答案 0 :(得分:6)
除了IE之外,所有主流浏览器的最新版本都可以通过Selection
对象的extend()
方法实现。这是一个从Range创建向后选择的函数:
function selectRangeBackwards(range) {
var sel = window.getSelection();
var endRange = range.cloneRange();
endRange.collapse(false);
sel.removeAllRanges();
sel.addRange(endRange);
sel.extend(range.startContainer, range.startOffset);
}
这在任何版本的IE中都不可能(包括版本11)。虽然IE 9及更高版本确实实现了DOM Level 2 Range和HTML5 Text Selection(现已迁移到WHATWG Range spec),但是当它们实现它时,版本的版本为did not include extend()
,因此IE 9不支持它(有关向后选择的进一步讨论,另请参阅this bug)。
以下是在IE错误跟踪器中实现extend()
的请求:https://connect.microsoft.com/IE/feedback/details/737106/implement-missing-extend-method-of-selection
在早期版本的IE中,选择API完全不同,并且不支持以编程方式创建向后选择。