Как определить, выбрал ли пользователь весь документ или нет в HTML и JavaScript? - PullRequest
0 голосов
/ 25 октября 2010

Я разрабатываю автономную веб-страницу для 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";
    }
}

Это отлично работает для нормального выбора.

Редактировать:

Как определить, что пользователь выбрал весьдокумент или нет?

Что делать?

Ответы [ 3 ]

2 голосов
/ 25 октября 2010

Ниже приведена функция, которая возвращает логическое значение, указывающее, выбрано ли все содержимое указанного элемента и работает ли оно во всех основных браузерах, включая 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) );
2 голосов
/ 25 октября 2010

Но я не хочу, чтобы пользователь мог выбрать весь документ и выделить его.

Почему бы и нет?

Вмешательство в типично ожидаемый просмотр пользователей- опыт никогда не бывает полезным и обычно приводит к тому, что разочарованные пользователи просто отключают JS или вообще отказываются от вашего сайта.

Пожалуйста, пересмотрите.

1 голос
/ 25 октября 2010

Не могли бы вы использовать selectNodeContents(document body) (псевдокод) для создания диапазона, представляющего всю страницу, а затем сравнить его с диапазоном, выбранным пользователем?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...