Выбор JavaScript в окне - PullRequest
16 голосов
/ 31 мая 2011

В JavaScript есть метод window.getSelection(), который позволяет мне получить текущий выбор, который сделал пользователь.

Есть ли соответствующая функция, что-то вроде window.setSelection(), которая позволит мне установитьили очистить текущий выбор?

Ответы [ 3 ]

16 голосов
/ 31 мая 2011

Очистка выделения во всех основных браузерах:

function clearSelection() {
    if (window.getSelection) {
        window.getSelection().removeAllRanges();
    } else if (document.selection) {
        document.selection.empty();
    }
}

Для выбора контента требуется использование DOM Range и Selection объектов в большинстве браузеров иTextRange объекты в IE <9. Вот простой кросс-браузерный пример, который выбирает содержимое определенного элемента: </p>

function selectElement(element) {
    if (window.getSelection) {
        var sel = window.getSelection();
        sel.removeAllRanges();
        var range = document.createRange();
        range.selectNodeContents(element);
        sel.addRange(range);
    } else if (document.selection) {
        var textRange = document.body.createTextRange();
        textRange.moveToElementText(element);
        textRange.select();
    }
}
7 голосов
/ 31 мая 2011

Может быть, это сделает это:

window.selection.clear();

Кроссбраузерная версия:

if (window.getSelection) {
   if (window.getSelection().empty) {  // Chrome
     window.getSelection().empty();
   } else if (window.getSelection().removeAllRanges) {  // Firefox
     window.getSelection().removeAllRanges();
   }
} else if (document.selection) {  // IE?
  document.selection.empty();
}
0 голосов
/ 31 мая 2011

В браузерах, которые поддерживают «выделение» и «диапазон», вы захотите создать объект диапазона и затем установить его начало / конец. Документация Mozilla для объекта "range" содержит много информации.

Chrome не поддерживает это, по крайней мере, не с этим API, и я уверен, что Safari тоже не поддерживает.

edit & mdash; спасибо @Tim Down за то, что он отметил, что WebKit (Chrome & Safari) действительно поддерживают это, что означает, что в моем jsfiddle была опечатка или что-то в этом роде!

...