Answers:
function clearSelection() {
if(document.selection && document.selection.empty) {
document.selection.empty();
} else if(window.getSelection) {
var sel = window.getSelection();
sel.removeAllRanges();
}
}
您还可以将这些样式应用于所有非IE浏览器和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;
请参见blogs.msdn.com/b/ie/archive/2012/01/11/…@PaoloBergantino
用简单的javascript:
element.addEventListener('mousedown', function(e){ e.preventDefault(); }, false);
或使用jQuery:
jQuery(element).mousedown(function(e){ e.preventDefault(); });
return false
使用event.preventDefault()
不会杀死mousedown时可能拥有的其他任何处理程序之外。
element
是文本区域时才是。
为防止仅在双击后选择文本:
您可以使用MouseEvent#detail
属性。对于mousedown或mouseup事件,该值为1加上当前的点击计数。
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);
参见https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail
(event.detail === 2)
要真正防止ONLY双击(而不是三击等)
FWIW,我将那些子元素user-select: none
的父元素设置为在双击父元素的任何位置时都不希望以某种方式选择的子元素。而且有效!很酷的是contenteditable="true"
,文本选择等仍然可以在子元素上使用!
像这样:
<div style="user-select: none">
<p>haha</p>
<p>haha</p>
<p>haha</p>
<p>haha</p>
</div>
style="user-select: note"
到处都是解决我试图解决的问题:)
一个简单的Javascript函数,使页面元素内部的内容不可选择:
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";
}
}
对于那些正在寻找Angular 2+解决方案的人。
您可以使用mousedown
表格单元格的输出。
<td *ngFor="..."
(mousedown)="onMouseDown($event)"
(dblclick) ="onDblClick($event)">
...
</td>
并防止如果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 ...
}
该dblclick
产量继续按预期方式工作。
如果您试图完全禁止通过任何方法以及仅双击来选择文本,则可以使用user-select: none
css属性。我已经在Chrome 68中进行了测试,但是根据https://caniuse.com/#search=user-select,它应该可以在其他当前的普通用户浏览器中使用。
从行为上讲,在Chrome 68中,它是由子元素继承的,即使选择了围绕元素(包括元素)的文本,也不允许选择元素包含的文本。