У більшості браузерів цього можна досягти за допомогою власних варіантів user-select
властивості CSS , спочатку запропонованих та потім відмовлених у CSS 3 та тепер запропонованих у CSS UI 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;
}
Для Internet Explorer <10 та Opera <15 вам потрібно буде використовувати unselectable
атрибут елемента, який ви хочете не вибрати. Ви можете встановити це за допомогою атрибута в HTML:
<div id="foo" unselectable="on" class="unselectable">...</div>
На жаль, це властивість не успадковується, це означає, що ви повинні поставити атрибут у стартовий тег кожного елемента всередині <div>
. Якщо це проблема, ви можете замість цього використовувати JavaScript, щоб зробити це рекурсивно для нащадків елемента:
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"));
Оновлення 30 квітня 2014 року : цей обхід дерева потрібно повторно повторювати щоразу, коли до дерева буде доданий новий елемент, але, виходячи з коментаря @Han, це можливо уникнути, додавши mousedown
обробник подій, який встановлюється unselectable
на меті подія. Докладні відомості див. На веб-сайті http://jsbin.com/yagekiji/1 .
Це все ще не охоплює всіх можливостей. Хоча неможливо ініціювати виділення в невибірних елементах, у деяких браузерах (наприклад, Internet Explorer і Firefox) все ще неможливо запобігти вибору, які починаються до та закінчуються після не виділеного елемента, не роблячи весь документ невибірним.