JQuery veya jQuery-UI, belirli belge öğeleri için metin seçimini devre dışı bırakma işlevine sahip mi?
JQuery veya jQuery-UI, belirli belge öğeleri için metin seçimini devre dışı bırakma işlevine sahip mi?
Yanıtlar:
JQuery 1.8'de bu aşağıdaki gibi yapılabilir:
(function($){
$.fn.disableSelection = function() {
return this
.attr('unselectable', 'on')
.css('user-select', 'none')
.on('selectstart', false);
};
})(jQuery);
JQuery kullanıcı arabirimi kullanıyorsanız, bunun için bir yöntem vardır, ancak yalnızca fare seçimini işleyebilir (yani CTRL+ Ahala çalışıyor):
$('.your-element').disableSelection(); // deprecated in jQuery UI 1.9
JQuery kullanıcı arabirimini kullanmak istemiyorsanız, kod gerçekten basittir:
$(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; });
Bu cevabı ( Metin Tablosunun Vurgulamasını Önle ) en yararlı buldum ve belki de IE uyumluluğu sağlamanın başka bir yolu ile birleştirilebilir.
#yourTable
{
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
user-select: none;
}
Bağlantı kesme seçimi ve bazı kısayol tuşlarının iptal edilmesi için daha kapsamlı bir çözüm ( Ctrl+ ave Ctrl+ gibi c. Test: Cmd + ave 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);
ve çağrı örneği:
$(':not(input,select,textarea)').disableSelection();
Bu aynı zamanda FireFox'un eski sürümleri için yeterli olmayabilir (hangisini söyleyemem). Tüm bunlar işe yaramazsa aşağıdakileri ekleyin:
.on('mousedown', false)
attr('unselectable', 'on')
iki kez araıyorsun? Bir yazım hatası mı yoksa yararlı mı?
Aşağıdakiler, tüm yaygın tarayıcılarda (IE, Chrome, Mozilla, Opera ve Safari) tüm sınıf 'öğesi' seçimini devre dışı bırakır:
$(".item")
.attr('unselectable', 'on')
.css({
'user-select': 'none',
'MozUserSelect': 'none'
})
.on('selectstart', false)
.on('mousedown', false);
$(document).ready(function(){
$("body").css("-webkit-user-select","none");
$("body").css("-moz-user-select","none");
$("body").css("-ms-user-select","none");
$("body").css("-o-user-select","none");
$("body").css("user-select","none");
});
Bu, JavaScript kullanılarak kolayca yapılabilir Bu, tüm Tarayıcılar için geçerlidir
<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>
Bu işlevi çağırın
<script type="text/javascript">
disableSelection(document.body)
</script>
Bu aslında çok basit. Metin seçimini devre dışı bırakmak (ve ayrıca metni sürüklemek için tıklayın (örneğin Chrome'da bir bağlantı)), aşağıdaki jQuery kodunu kullanmanız yeterlidir:
$('body, html').mousedown(function(event) {
event.preventDefault();
});
Tüm bunlar, farenizle ( mousedown()
) tıkladığınızda varsayılanınbody
ve html
etiketlerinde . Çok kolayca sadece (iki tırnak arasına-örneğin değişikliği metnini değiştirerek eleman değiştirebilir $('body, html')
için $('#myUnselectableDiv')
yapmak myUnselectableDiv
div, iyi, unselectable olmak.
Bunu size göstermek / kanıtlamak için hızlı bir snippet:
$('#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>
Bu efektin mükemmel olmadığını ve tüm pencereyi seçilemez hale getirirken en iyisini gerçekleştirdiğini lütfen unutmayın. Ayrıca eklemek isteyebilirsiniz
bazı kısayol tuşlarının iptal edilmesi ( Ctrl+ave gibi Ctrl+c. Test: Cmd+a veCmd+c )
ayrıca Vladimir'in cevabının yukarıdaki bölümünü kullanarak. (görevinden almak burada )
KROM için 1 hat çözümü:
body.style.webkitUserSelect = "none";
ve FF:
body.style.MozUserSelect = "none";
IE "seçilemez" özniteliğinin ayarlanmasını gerektirir (ayrıntılar alt kısımdadır).
Bunu Chrome'da test ettim ve işe yarıyor. Bu özellik devralınır, böylece gövde öğesinde ayarlanması tüm belgenizdeki seçimi devre dışı bırakır.
Ayrıntılar burada: http://help.dottoro.com/ljrlukea.php
Closure kullanıyorsanız, şu işlevi çağırmanız yeterlidir:
goog.style.setUnselectable(myElement, true);
Tüm tarayıcıları şeffaf bir şekilde yönetir.
IE olmayan tarayıcılar şu şekilde işlenir:
goog.style.unselectableStyle_ =
goog.userAgent.GECKO ? 'MozUserSelect' :
goog.userAgent.WEBKIT ? 'WebkitUserSelect' :
null;
Burada tanımlanmıştır: http://closure-library.googlecode.com/svn/!svn/bc/4/trunk/closure/goog/docs/closure_goog_style_style.js.source.html
IE kısmı şu şekilde ele alınır:
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);
}
}
Bu kodun tüm tarayıcılarda çalıştığını ve en az ek yükü gerektirdiğini düşünüyorum . Gerçekten yukarıdaki tüm cevapların bir melezi. Bir hata bulursanız bana bildirin!
CSS ekle:
.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 ekle:
(function($){
$.fn.disableSelection = function()
{
$(this).addClass('no_select');
if($.browser.msie)
{
$(this).attr('unselectable', 'on').on('selectstart', false);
}
return this;
};
})(jQuery);
İsteğe bağlı: Tüm alt öğeler için de seçimi devre dışı bırakmak için IE bloğunu şu şekilde değiştirebilirsiniz:
$(this).each(function() {
$(this).attr('unselectable','on')
.bind('selectstart',function(){ return false; });
});
Kullanımı:
$('.someclasshere').disableSelection();
Bunun bir çözümü, uygun durumlar <button>
için, seçilmesini istemediğiniz metin için a kullanmaktır . Bir click
metin bloğundaki olaya bağlama yapıyorsanız ve bu metnin seçilebilir olmasını istemiyorsanız, bunu bir düğme olarak değiştirmek anlambilimi iyileştirecek ve metnin seçilmesini engelleyecektir.
<button>Text Here</button>
En iyi ve en basit şekilde buldum, ctrl + c'yi önler, sağ tıklama. Bu durumda her şeyi engelledim, bu yüzden hiçbir şey belirtmem gerekmiyor.
$(document).bind("contextmenu cut copy",function(e){
e.preventDefault();
//alert('Copying is not allowed');
});