Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.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/8/.htaccess/6.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 对于Rangy,即使我通过setStartBefore方法扩展了范围,range.canSurroundContents方法仍然返回false_Javascript_Range_Selection_Textselection_Rangy - Fatal编程技术网

Javascript 对于Rangy,即使我通过setStartBefore方法扩展了范围,range.canSurroundContents方法仍然返回false

Javascript 对于Rangy,即使我通过setStartBefore方法扩展了范围,range.canSurroundContents方法仍然返回false,javascript,range,selection,textselection,rangy,Javascript,Range,Selection,Textselection,Rangy,我有以下html: <p>Morbi quis augue vitae quam <a href="#">pharetra| varius</a> at at| urna.</p> 要查看它的运行情况,请选中 并且以下返回true: range.containsNode(anchorNode); 问题是“range.canSurroundContents()”返回“false”“元素完全包含在范围内,从开始到结束,为什么不能使用“canSurr

我有以下html:

<p>Morbi quis augue vitae quam <a href="#">pharetra| varius</a> at at| urna.</p>
要查看它的运行情况,请选中

并且以下返回true:

range.containsNode(anchorNode);
问题是“range.canSurroundContents()”返回“false”“元素完全包含在范围内,从开始到结束,为什么不能使用“canSurroundContents()”,当然,如果可能的话,我如何使用它


谢谢

我认为问题在于
anchorNode
是链接中的文本节点,而不是链接本身,因此选择从链接中开始,而不是在链接之前。在链接之前移动范围的起点应该可以修复它。此外,除非Rangy以外的其他人对其进行了修改,否则无需对选择调用
refresh()
,尽管这不会在此处造成任何问题

修订版JSFIDLE:

代码:


谢谢Tim,rangy是在浏览器选择中挣扎的开发者的完美伴侣,干得好!
range.containsNode(anchorNode);
$('body').on('mouseup', '[contenteditable]', function() {
    var block = this,
    sel = rangy.getSelection(),
    range = sel.getRangeAt(0);

    if (sel.anchorNode.parentNode !== block) {
        range.setStartBefore(sel.anchorNode.parentNode);
        sel.setSingleRange(range, false);
    }
});