In den meisten Browsern kann dies mithilfe proprietärer Variationen der CSS- user-select
Eigenschaft erreicht werden, die ursprünglich in CSS 3 vorgeschlagen und dann aufgegeben und jetzt in CSS UI Level 4 vorgeschlagen wurden :
*.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;
}
Für Internet Explorer <10 und Opera <15 müssen Sie das unselectable
Attribut des Elements verwenden, dessen Auswahl Sie aufheben möchten. Sie können dies mithilfe eines Attributs in HTML festlegen:
<div id="foo" unselectable="on" class="unselectable">...</div>
Leider wird diese Eigenschaft nicht vererbt, was bedeutet, dass Sie ein Attribut in das Start-Tag jedes Elements innerhalb der setzen müssen <div>
. Wenn dies ein Problem ist, können Sie stattdessen JavaScript verwenden, um dies rekursiv für die Nachkommen eines Elements durchzuführen:
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"));
Update 30. April 2014 : Diese Baumdurchquerung muss wiederholt werden, wenn ein neues Element zum Baum hinzugefügt wird. Aus einem Kommentar von @Han geht jedoch hervor, dass dies durch Hinzufügen eines mousedown
Ereignishandlers, der unselectable
das Ziel des Baums festlegt, vermieden werden kann Veranstaltung. Weitere Informationen finden Sie unter http://jsbin.com/yagekiji/1 .
Dies deckt immer noch nicht alle Möglichkeiten ab. Während es unmöglich ist, eine Auswahl in nicht auswählbaren Elementen zu initiieren, ist es in einigen Browsern (z. B. Internet Explorer und Firefox) immer noch unmöglich, eine Auswahl zu verhindern, die vor und nach dem nicht auswählbaren Element beginnt, ohne das gesamte Dokument auswählbar zu machen.