Nella maggior parte dei browser, ciò può essere ottenuto utilizzando varianti proprietarie della user-select
proprietà CSS , originariamente proposte e poi abbandonate in CSS 3 e ora proposte in CSS UI Level 4 :
*.unselectable {
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
/*
Introduced in Internet Explorer 10.
See http://ie.microsoft.com/testdrive/HTML5/msUserSelect/
*/
-ms-user-select: none;
user-select: none;
}
Per Internet Explorer <10 e Opera <15, dovrai utilizzare l' unselectable
attributo dell'elemento che desideri non sia selezionabile. Puoi impostarlo usando un attributo in HTML:
<div id="foo" unselectable="on" class="unselectable">...</div>
Purtroppo questa proprietà non è ereditata, il che significa che devi inserire un attributo nel tag iniziale di ogni elemento all'interno di <div>
. Se questo è un problema, puoi invece usare JavaScript per farlo ricorsivamente per i discendenti di un elemento:
function makeUnselectable(node) {
if (node.nodeType == 1) {
node.setAttribute("unselectable", "on");
}
var child = node.firstChild;
while (child) {
makeUnselectable(child);
child = child.nextSibling;
}
}
makeUnselectable(document.getElementById("foo"));
Aggiornamento del 30 aprile 2014 : questo attraversamento dell'albero deve essere rieseguito ogni volta che un nuovo elemento viene aggiunto all'albero, ma sembra da un commento di @Han che è possibile evitarlo aggiungendo un mousedown
gestore di eventi che si imposta unselectable
sulla destinazione del evento. Vedi http://jsbin.com/yagekiji/1 per i dettagli.
Questo non copre ancora tutte le possibilità. Sebbene sia impossibile avviare selezioni in elementi non selezionabili, in alcuni browser (ad esempio Internet Explorer e Firefox) è ancora impossibile impedire selezioni che iniziano prima e finiscono dopo l'elemento non selezionabile senza rendere l'intero documento non selezionabile.