Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在选择中,焦点偏移是否可以在主播偏移之前?_Javascript_Html_Selection_Range - Fatal编程技术网

Javascript 在选择中,焦点偏移是否可以在主播偏移之前?

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

在JavaScript中以编程方式定义范围/选择时,是否不可能使范围中的focusOffset在anchorOffset之前?那么我们如何定义从右到左的选择呢


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);
}