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.selection
implica 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 probarloempty
en el caso final.