État des lieux des affaires de dé-sélection 2014
J'ai fait quelques recherches de mon côté. Voici la fonction que j'ai écrite et que j'utilise ces jours-ci :
(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();
})();
En gros, getSelection().removeAllRanges()
est actuellement pris en charge par tous les navigateurs modernes (y compris IE9+). Il s'agit clairement de la méthode correcte pour l'avenir.
Les problèmes de compatibilité sont pris en compte :
- Anciennes versions de Chrome et Safari utilisées
getSelection().empty()
- Utilisation d'IE8 et des versions inférieures
document.selection.empty()
Mise à jour
C'est probablement une bonne idée d'emballer cette fonctionnalité de sélection pour la réutiliser.
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();
J'en ai fait un wiki communautaire pour que vous puissiez y ajouter des fonctionnalités, ou mettre à jour les choses au fur et à mesure que les normes évoluent.