Respostas:
function clearSelection() {
if(document.selection && document.selection.empty) {
document.selection.empty();
} else if(window.getSelection) {
var sel = window.getSelection();
sel.removeAllRanges();
}
}
Você também pode aplicar esses estilos à extensão de todos os navegadores que não sejam do IE e IE10:
span.no_selection {
user-select: none; /* standard syntax */
-webkit-user-select: none; /* webkit (safari, chrome) browsers */
-moz-user-select: none; /* mozilla browsers */
-khtml-user-select: none; /* webkit (konqueror) browsers */
-ms-user-select: none; /* IE10+ */
}
-ms-user-select: none;
ver blogs.msdn.com/b/ie/archive/2012/01/11/... @PaoloBergantino
Em javascript simples:
element.addEventListener('mousedown', function(e){ e.preventDefault(); }, false);
Ou com jQuery:
jQuery(element).mousedown(function(e){ e.preventDefault(); });
return false
usado, event.preventDefault()
que não mata nenhum outro manipulador que você possa ter na ratoeira.
element
for uma área de texto, sim.
Para impedir a seleção de texto SOMENTE após um clique duplo:
Você poderia usar a MouseEvent#detail
propriedade. Para eventos de redução de mouse ou mouse, é 1 mais a contagem atual de cliques.
document.addEventListener('mousedown', function (event) {
if (event.detail > 1) {
event.preventDefault();
// of course, you still do not know what you prevent here...
// You could also check event.ctrlKey/event.shiftKey/event.altKey
// to not prevent something useful.
}
}, false);
Consulte https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail
(event.detail === 2)
para realmente impedir APENAS clique duplo (e não clique três vezes etc.)
FWIW, defino user-select: none
o elemento pai desses elementos filhos que não quero que sejam selecionados de alguma maneira ao clicar duas vezes em qualquer lugar no elemento pai. E funciona! Coisa legal écontenteditable="true"
seleção de textos e etc. ainda funciona nos elementos filho!
Assim como:
<div style="user-select: none">
<p>haha</p>
<p>haha</p>
<p>haha</p>
<p>haha</p>
</div>
style="user-select: note"
todos os lugares resolveu o problema que eu estava tentando resolver :)
Uma função Javascript simples que torna o conteúdo dentro de um elemento da página não selecionável:
function makeUnselectable(elem) {
if (typeof(elem) == 'string')
elem = document.getElementById(elem);
if (elem) {
elem.onselectstart = function() { return false; };
elem.style.MozUserSelect = "none";
elem.style.KhtmlUserSelect = "none";
elem.unselectable = "on";
}
}
Para quem procura uma solução para o Angular 2+ .
Você pode usar a mousedown
saída da célula da tabela.
<td *ngFor="..."
(mousedown)="onMouseDown($event)"
(dblclick) ="onDblClick($event)">
...
</td>
E previna se o detail > 1
.
public onMouseDown(mouseEvent: MouseEvent) {
// prevent text selection for dbl clicks.
if (mouseEvent.detail > 1) mouseEvent.preventDefault();
}
public onDblClick(mouseEvent: MouseEvent) {
// todo: do what you really want to do ...
}
A dblclick
saída continua a funcionar como esperado.
ou, no mozilla:
document.body.onselectstart = function() { return false; } // Or any html object
No IE,
document.body.onmousedown = function() { return false; } // valid for any html object as well
document.body
.
Segmento antigo, mas encontrei uma solução que acredito ser mais limpa, pois não desativa todos os objetos vinculados ao objeto e apenas impede seleções de texto aleatórias e indesejadas na página. É simples e funciona bem para mim. Aqui está um exemplo; Quero impedir a seleção de texto quando clicar várias vezes no objeto com a classe "seta à direita":
$(".arrow-right").hover(function(){$('body').css({userSelect: "none"});}, function(){$('body').css({userSelect: "auto"});});
HTH!
Se você estiver tentando impedir completamente a seleção de texto por qualquer método, bem como apenas com um clique duplo, poderá usar o user-select: none
atributo css. Eu testei no Chrome 68, mas de acordo com https://caniuse.com/#search=user-select, ele deve funcionar nos outros navegadores de usuário normais atuais.
Comportamental, no Chrome 68, ele é herdado por elementos filho e não permite selecionar o texto contido em um elemento, mesmo quando o texto ao redor e incluindo o elemento foi selecionado.
Para impedir IE 8 CTRL e SHIFT, clique na seleção de texto no elemento individual
var obj = document.createElement("DIV");
obj.onselectstart = function(){
return false;
}
Para impedir a seleção de texto no documento
window.onload = function(){
document.onselectstart = function(){
return false;
}
}