вторник, 12 июля 2011 г.

jQuery, CSS. Как отключить выделение мышкой текста для отдельного блока

Иногда нужно запретить выделение текста в некоторых блоках - например при динамическом изменении размера, текст блока будет выделяться, что не есть красиво.

Решений тут два: используем jQuery либо CSS.

jQuery:
$(".classname").attr('unselectable','on').css('MozUserSelect','none');

CSS:
.classname{
  -moz-user-select: none;
  -khtml-user-select: none;
  -webkit-user-select: none;
  -o-user-select: none;
  user-select: none;
}
Учитывая пожелания высказанные в комментариях, привожу пример яваскриптового отключения выделения (организованного в плагин), с явным отключением самого ивента 'onselectstart', а также содержащий весь уже выше перечисленный функционал:
jQuery.fn.extend({ 
    disableSelection : function() { 
            this.each(function() { 
                    this.onselectstart = function() { return false; }; 
                    this.unselectable = "on"; 
                    jQuery(this).css({
                      '-moz-user-select': 'none',
                      '-khtml-user-select': 'none',
                      '-webkit-user-select': 'none',
                      '-o-user-select': 'none',
                      'user-select': 'none'
                    });

            }); 
    },
    enableSelection : function() { 
            this.each(function() { 
                    this.onselectstart = function() {}; 
                    this.unselectable = "off";
                    jQuery(this).css({
                      '-moz-user-select': 'auto',
                      '-khtml-user-select': 'auto',
                      '-webkit-user-select': 'auto',
                      '-o-user-select': 'auto',
                      'user-select': 'auto'
                    });
            }); 
    } 
});

// Example:
var selector = "td, span, div";
$(selector).disableSelection(); // disable
....
$(selector).enableSelection(); // enable

5 комментариев:

  1. Сори, но статья не полная. Это не кроссбраузерно. Проверял.
    Погуглив, дополнил статью. Вот что получилось:
    http://tehno-team.net/javascript/25

    ОтветитьУдалить
  2. В каких браузерах не сработало? Просто блокировать яваскриптом, это дополнительная нагрузка, особенно если на странице сложный юзер-интерфейс.

    Если это только в старых браузерах, тогда нужно смотреть, что есть приоритетнее - поддержка их или перегрузка скриптами страницы. Возможно нужно попробовать комбинировать.

    ОтветитьУдалить
  3. А что юзать - это зависит от постановки задачи. В любом случае, спасибо за ссылку. Обязательно добавлю в статью пример из нее, как только протестирую его сам.

    ОтветитьУдалить
  4. обновил статью, добавил плагин который использует все возможные способы для отключения выделения по селектору, а также позволяет отменить это действие. Что позволит гибко управлять выделением текста на странице.

    ОтветитьУдалить
  5. jQuery вариант у меня не сработал, зато получилось с css. Спасибо за код!

    ОтветитьУдалить