javascript - 如何在 HTML 和 JavaScript 中检测用户是否选择了整个文档?

标签 javascript html dom range

我正在为 iPhone Safari 开发一个离线网页。

用于在网页中突出显示用户的选择。我已经实现了以下代码。

function highlight() {

    if (window.getSelection) {
        sel = window.getSelection();
        if (sel.getRangeAt) {
            range = sel.getRangeAt(0);
        }
        document.designMode = "on";
        if (range) {
            sel.removeAllRanges();
            sel.addRange(range);
        }        
        document.execCommand("HiliteColor", false, "yellow");       
        document.designMode = "off";
    }
}

这对于正常选择来说非常有效。

编辑:

如何检测用户是否选择了整个文档?

要做什么?

最佳答案

下面的函数将返回一个 bool 值,指示是否选择了指定元素的所有内容并在所有主要浏览器(包括 IE)中工作。您可以将其与 document.body 一起使用来测试是否选择了整个页面。

function areElementContentsSelected(el) {
    var range, elRange;
    if (window.getSelection && document.createRange) {
        var sel = window.getSelection();
        if (sel.rangeCount) {
            elRange = document.createRange();
            elRange.selectNodeContents(el);
            for (var i = 0, len = sel.rangeCount; i < len; ++i) {
                range = sel.getRangeAt(i);
                if (range.compareBoundaryPoints(range.START_TO_START, elRange) <= 0 && range.compareBoundaryPoints(range.END_TO_END, elRange) >= 0) {
                    return true;
                }
            }
        }
    } else if (document.selection && document.selection.createRange && document.selection.type == "Text") {
        range = document.selection.createRange();
        elRange = range.duplicate();
        elRange.moveToElementText(el);
        return range.compareEndPoints("StartToStart", elRange) <= 0 && range.compareEndPoints("EndToEnd", elRange) >= 0;
    }
    return false;
}

alert( areElementContentsSelected(document.body) );

关于javascript - 如何在 HTML 和 JavaScript 中检测用户是否选择了整个文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4015728/

相关文章:

javascript - 在哪里可以检索 Cognito 身份池的公钥?

javascript - 自 4.5 版起,ANTLR 无法生成 Javascript 代码

javascript - 防止点击事件触发父操作

c# - 如何在 C# 中的 WebBrowser_DocumentCompleted 中执行多项操作

javascript - 是否可以将所有 AngularJS 文件(例如 Controller 、工厂)加载到外部 HTML 中?

javascript - python Selenium : Remove certain characters from web page body

javascript - 从 jQgrid EditURL 返回一个值

html - 如何将下拉菜单更改为透明

c# - 向 XMl 添加节点

JavaScript 获取内容框的大小