Estado de los asuntos de des-selección 2014
Investigué por mi cuenta. Aquí está la función que escribí y estoy usando en estos días:
(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();
})();
Básicamente, getSelection().removeAllRanges()actualmente es compatible con todos los navegadores modernos (incluido IE9 +). Este es claramente el método correcto para avanzar.
Los problemas de compatibilidad explicaron:
- Versiones antiguas de Chrome y Safari utilizadas
getSelection().empty()
- IE8 y abajo usado
document.selection.empty()
Actualizar
Probablemente sea una buena idea concluir esta funcionalidad de selección para su reutilización.
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();
He hecho de esto un wiki comunitario para que ustedes puedan agregar funcionalidad a esto o actualizar cosas a medida que evolucionan los estándares.
document.selectionimplica la existencia de unempty()método de la misma. Has probado el método en cualquier otro caso, por lo que también podrías probarloemptyen el caso final.