window.getSelection(),如何判断锚节点是否位于焦点节点之前?

发布于 2024-12-14 03:36:28 字数 88 浏览 1 评论 0原文

我只想允许从左到右进行选择,因此锚节点始终是 DOM 树中的第一个节点(相对于焦点节点)。

有没有一种简单的方法来测试锚节点是否位于焦点节点之前?

I want to only allow selection from left to right, so the anchor node is always going to be the first node in the DOM tree (relative to the focus node).

Is there an easy way to test if the anchor node comes before the focus node?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冰火雁神 2024-12-21 03:36:28

下面是一种简单的方法,它利用以下事实:将 DOM Range 的结尾设置为文档中比该范围的开头更早的点将会折叠该范围。我认为这会在 Firefox 2 中被打破,它在处理这个问题时有一个错误,但该浏览器的用户数量很少。

function isSelectionBackwards() {
    var backwards = false;
    if (window.getSelection) {
        var sel = window.getSelection();
        if (!sel.isCollapsed) {
            var range = document.createRange();
            range.setStart(sel.anchorNode, sel.anchorOffset);
            range.setEnd(sel.focusNode, sel.focusOffset);
            backwards = range.collapsed;
            range.detach();
        }
    }
    return backwards;
}

Here's a simple way to do it that uses the fact that setting the end of a DOM Range to be at an earlier point in the document than the start of the range will collapse the range. I think this will break in Firefox 2, which had a bug in its handling of this, but the number of users of that browser is tiny.

function isSelectionBackwards() {
    var backwards = false;
    if (window.getSelection) {
        var sel = window.getSelection();
        if (!sel.isCollapsed) {
            var range = document.createRange();
            range.setStart(sel.anchorNode, sel.anchorOffset);
            range.setEnd(sel.focusNode, sel.focusOffset);
            backwards = range.collapsed;
            range.detach();
        }
    }
    return backwards;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文