Состояние дел по отмене отбора, 2014 г.
Я провел собственное исследование. Вот функция, которую я написал и использую сейчас:
(function deselect(){
var selection = ('getSelection' in window)
? window.getSelection()
: ('selection' in document)
? document.selection
: null;
if ('removeAllRanges' in selection) selection.removeAllRanges();
else if ('empty' in selection) selection.empty();
})();
По сути, getSelection().removeAllRanges()в настоящее время поддерживается всеми современными браузерами (включая IE9 +). Очевидно, что это правильный метод продвижения вперед.
Учтены проблемы совместимости:
- Использованы старые версии Chrome и Safari
getSelection().empty()
- IE8 и ниже используются
document.selection.empty()
Обновить
Вероятно, неплохо было бы завершить эту функцию выбора для повторного использования.
function ScSelection(){
var sel=this;
var selection = sel.selection =
'getSelection' in window
? window.getSelection()
: 'selection' in document
? document.selection
: null;
sel.deselect = function(){
if ('removeAllRanges' in selection) selection.removeAllRanges();
else if ('empty' in selection) selection.empty();
return sel; // chainable :)
};
sel.getParentElement = function(){
if ('anchorNode' in selection) return selection.anchorNode.parentElement;
else return selection.createRange().parentElement();
};
}
// use it
var sel = new ScSelection;
var $parentSection = $(sel.getParentElement()).closest('section');
sel.deselect();
Я сделал эту вики-страницу сообщества, чтобы вы, люди, могли добавлять к ней функции или обновлять вещи по мере развития стандартов.
document.selectionподразумевает существованиеempty()метода этого. Вы протестировали этот метод во всех остальных случаях, так что можете проверить иemptyв последнем случае.