Javascript 在选择中,焦点偏移是否可以在主播偏移之前?
在JavaScript中以编程方式定义范围/选择时,是否不可能使范围中的focusOffset在anchorOffset之前?那么我们如何定义从右到左的选择呢Javascript 在选择中,焦点偏移是否可以在主播偏移之前?,javascript,html,selection,range,Javascript,Html,Selection,Range,在JavaScript中以编程方式定义范围/选择时,是否不可能使范围中的focusOffset在anchorOffset之前?那么我们如何定义从右到左的选择呢 JS fiddler链接,例如:您需要交换两个变量,然后: function makeSelection(a, b) { if(b < a) { var tmpA = a; a = b; b = tmpA; } // ... rest of your code
JS fiddler链接,例如:您需要交换两个变量,然后:
function makeSelection(a, b) {
if(b < a) {
var tmpA = a;
a = b;
b = tmpA;
}
// ... rest of your code
函数makeSelection(a、b){
if(b
更新的演示。是一个很好的选择MDN文档。anchorOffset/anchorNode表示选择的“开始”(例如,在鼠标拖动过程中开始),而focusOffset/focusNode表示选择的“结束”(用户完成拖动)。这对于确定选择的左端/右端几乎没有用处。要检测它们,需要对象-左选择边界使用startContainer/startOffset,右边界使用endContainer/endOffset。根据需要从选择中获取范围
if (window.getSelection() && window.getSelection().rangeCount)
var range = window.getSelection().getRangeAt(0);
我想这足以构建正确的选择。创建“向后”选择的方法有些不明显。通过选择addRange()
方法简单地选择一个范围是不可能的,因为范围本质上是无方向的。您需要使用选择的方法(下面的示例)
注意:这在IE的任何版本中都不起作用,包括9:与以前的版本不同,IE 9有标准的选择和范围对象,但在Microsoft开发IE 9时,extend()
是非标准的,所以他们没有实现它,这意味着在任何尚未发布的IE版本中都无法通过编程方式创建向后选择。尽管我提交了一份文件,但IE 10没有实现extend()
在makeselection中,检查a>b,如果是真的,则将其反转。您可能的重复项是正确的。这是一个重复项。抱歉搜索功能较弱!别担心,我只知道我以前已经回答了这个问题。这都很好,但还不足以创建一个反向选择。非常有趣。我几乎确信这不值得付出努力,不是吗o劫持浏览器行为。这确实会使围绕浏览器行为的编码变得混乱。
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);
}