jQuery 또는 jQuery-UI에 지정된 문서 요소에 대한 텍스트 선택을 비활성화하는 기능이 있습니까?
jQuery 또는 jQuery-UI에 지정된 문서 요소에 대한 텍스트 선택을 비활성화하는 기능이 있습니까?
답변:
jQuery 1.8에서는 다음과 같이 할 수 있습니다.
(function($){
$.fn.disableSelection = function() {
return this
.attr('unselectable', 'on')
.css('user-select', 'none')
.on('selectstart', false);
};
})(jQuery);
jQuery UI를 사용하는 경우이를위한 방법이 있지만 마우스 선택 만 처리 할 수 있습니다 (예 : CTRL+ A는 여전히 작동).
$('.your-element').disableSelection(); // deprecated in jQuery UI 1.9
jQuery UI를 사용하지 않으려면 코드가 정말 간단합니다.
$(el).attr('unselectable','on')
.css({'-moz-user-select':'-moz-none',
'-moz-user-select':'none',
'-o-user-select':'none',
'-khtml-user-select':'none', /* you could also put this in a class */
'-webkit-user-select':'none',/* and add the CSS class here instead */
'-ms-user-select':'none',
'user-select':'none'
}).bind('selectstart', function(){ return false; });
이 답변 ( 텍스트 표 강조 방지 )이 가장 유용 하다는 것을 알았 으며 IE 호환성을 제공하는 다른 방법과 결합 할 수 있습니다.
#yourTable
{
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
user-select: none;
}
여기에 분리 선택에 대한보다 포괄적 인 솔루션 및 바로 가기 키의 일부의 취소입니다 (예 : Ctrl+ a와 Ctrl+가 c. 시험 : Cmd + a과 Cmd+ c)
(function($){
$.fn.ctrlCmd = function(key) {
var allowDefault = true;
if (!$.isArray(key)) {
key = [key];
}
return this.keydown(function(e) {
for (var i = 0, l = key.length; i < l; i++) {
if(e.keyCode === key[i].toUpperCase().charCodeAt(0) && e.metaKey) {
allowDefault = false;
}
};
return allowDefault;
});
};
$.fn.disableSelection = function() {
this.ctrlCmd(['a', 'c']);
return this.attr('unselectable', 'on')
.css({'-moz-user-select':'-moz-none',
'-moz-user-select':'none',
'-o-user-select':'none',
'-khtml-user-select':'none',
'-webkit-user-select':'none',
'-ms-user-select':'none',
'user-select':'none'})
.bind('selectstart', false);
};
})(jQuery);
전화 예 :
$(':not(input,select,textarea)').disableSelection();
이전 버전의 FireFox에는 충분하지 않을 수도 있습니다 (어떤 것을 알 수는 없습니다). 이 모든 것이 작동하지 않으면 다음을 추가하십시오.
.on('mousedown', false)
attr('unselectable', 'on')
두 번 전화 해요? 오타입니까 아니면 유용합니까?
다음은 모든 일반 브라우저 (IE, Chrome, Mozilla, Opera 및 Safari)에서 모든 클래스 '항목'을 선택하지 못하게합니다.
$(".item")
.attr('unselectable', 'on')
.css({
'user-select': 'none',
'MozUserSelect': 'none'
})
.on('selectstart', false)
.on('mousedown', false);
이것은 JavaScript를 사용하여 쉽게 수행 할 수 있습니다. 이것은 모든 브라우저에 적용됩니다
<script type="text/javascript">
/***********************************************
* Disable Text Selection script- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
***********************************************/
function disableSelection(target){
if (typeof target.onselectstart!="undefined") //For IE
target.onselectstart=function(){return false}
else if (typeof target.style.MozUserSelect!="undefined") //For Firefox
target.style.MozUserSelect="none"
else //All other route (For Opera)
target.onmousedown=function(){return false}
target.style.cursor = "default"
}
</script>
이 함수를 호출
<script type="text/javascript">
disableSelection(document.body)
</script>
이것은 실제로 매우 간단합니다. 텍스트 선택을 비활성화하고 텍스트를 클릭 + 드래그 (예 : Chrome의 링크)하려면 다음 jQuery 코드를 사용하십시오.
$('body, html').mousedown(function(event) {
event.preventDefault();
});
이 모든 것은 및 태그 mousedown()
에서 마우스 ( )로 클릭 할 때 기본값이 발생하는 것을 방지합니다 . 당신은 아주 쉽게 단지 (두 따옴표 사이에 - 예를 들면 변화를 텍스트를 변경하여 요소를 변경할 수 있습니다 에 만드는 사업부는, 음, 선택할 수 없게 할 수 있습니다.body
html
$('body, html')
$('#myUnselectableDiv')
myUnselectableDiv
이것을 보여주고 증명하는 빠른 스 니펫 :
$('#no-select').mousedown(function(event) {
event.preventDefault();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span id="no-select">I bet you can't select this text, or drag <a href="#">this link</a>, </span>
<br/><span>but that you can select this text, and drag <a href="#">this link</a>!</span>
이 효과는 완벽하지 않으며 전체 창을 선택할 수없는 상태에서 최상의 성능을 발휘합니다. 추가하고 싶을 수도 있습니다
일부 핫키 취소 (예 : Ctrl+a및 Ctrl+c. 테스트 : Cmd+a 및 Cmd+c)
또한 위의 블라디미르 답변의 해당 섹션을 사용하여. (자신의 게시물에 도착 여기 )
CHROME 용 1 라인 솔루션 :
body.style.webkitUserSelect = "none";
FF :
body.style.MozUserSelect = "none";
IE는 "선택 불가능"속성을 설정해야합니다 (상세 내용).
Chrome에서 이것을 테스트했으며 작동합니다. 이 속성은 상속되므로 body 요소에서 설정하면 전체 문서에서 선택이 비활성화됩니다.
자세한 내용은 여기 : http://help.dottoro.com/ljrlukea.php
Closure를 사용하는 경우 다음 함수를 호출하십시오.
goog.style.setUnselectable(myElement, true);
모든 브라우저를 투명하게 처리합니다.
비 IE 브라우저는 다음과 같이 처리됩니다.
goog.style.unselectableStyle_ =
goog.userAgent.GECKO ? 'MozUserSelect' :
goog.userAgent.WEBKIT ? 'WebkitUserSelect' :
null;
IE 부분은 다음과 같이 처리됩니다.
if (goog.userAgent.IE || goog.userAgent.OPERA) {
// Toggle the 'unselectable' attribute on the element and its descendants.
var value = unselectable ? 'on' : '';
el.setAttribute('unselectable', value);
if (descendants) {
for (var i = 0, descendant; descendant = descendants[i]; i++) {
descendant.setAttribute('unselectable', value);
}
}
이 코드 는 모든 브라우저에서 작동 하며 최소한의 오버 헤드가 필요 하다고 생각합니다 . 그것은 실제로 위의 모든 대답의 하이브리드입니다. 버그를 발견하면 알려주십시오!
CSS 추가 :
.no_select { user-select: none; -o-user-select: none; -moz-user-select: none; -khtml-user-select: none; -webkit-user-select: none; -ms-user-select:none;}
jQuery 추가 :
(function($){
$.fn.disableSelection = function()
{
$(this).addClass('no_select');
if($.browser.msie)
{
$(this).attr('unselectable', 'on').on('selectstart', false);
}
return this;
};
})(jQuery);
선택 사항 : 모든 하위 요소에 대한 선택을 비활성화하려면 IE 블록을 다음과 같이 변경할 수 있습니다.
$(this).each(function() {
$(this).attr('unselectable','on')
.bind('selectstart',function(){ return false; });
});
용법:
$('.someclasshere').disableSelection();