Как выделить / выбрать содержимое тега DIV, когда пользователь нажимает на DIV ... идея заключается в том, что весь текст выделяется / выделяется, поэтому пользователю не нужно вручную выделять текст с помощью мыши и, возможно, пропустить немного текста?
Например, скажем, у нас есть DIV, как показано ниже:
<div id="selectable">http://example.com/page.htm</div>
... и когда пользователь нажимает на любой из этих URL-адресов, весь текст URL-адреса выделяется, чтобы он мог легко перетаскивать выделенный текст в браузере или копировать полный URL-адрес правой кнопкой мыши.
Спасибо!
источник
document.getElementById('selectable')
наthis
. Затем вы можете незаметно добавить функциональность к нескольким элементам, например, к нескольким элементамjQuery('#selectcontainer div').click(selectText);
if (window.getSelection) {
должен быть первым для Opera ( quirksmode.org/dom/range_intro.html )window.getSelection().removeAllRanges();
раньшеwindow.getSelection().addRange(range);
ОБНОВЛЕНИЕ 2017:
Чтобы выбрать содержимое узла, вызовите:
Это работает во всех современных браузерах, включая IE9 + (в стандартном режиме).
Runnable Пример:
Исходный ответ ниже устарел, поскольку
window.getSelection().addRange(range);
устарелОригинальный ответ:
Все приведенные выше примеры используют:
но проблема в том, что он выбирает сам узел, включая тег DIV и т. д.
Чтобы выбрать текст Узла согласно OP-вопросу, вам нужно позвонить взамен:
Таким образом, полный фрагмент будет:
источник
this
вместо получения элемента на основе идентификатора, если он находится внутриclick
слушателя элемента .Есть чистое решение CSS4:
user-select
является спецификацией уровня 4 модуля CSS, которая в настоящее время является черновым и нестандартным свойством CSS, но браузеры хорошо ее поддерживают - см. # search = user-select .Узнайте больше о выборе пользователя здесь на MDN и поиграйте с ним здесь, в w3scools
источник
Ответ Neuroxik был действительно полезным. У меня были только проблемы с Chrome, потому что когда я нажимал на внешний div, он не работал. Я мог бы решить эту проблему, удалив старые диапазоны, прежде чем добавить новый диапазон:
источник
Для содержимого, редактируемого (не для обычного ввода, вам нужно использовать selectNodeContents (а не просто selectNode).
ПРИМЕЧАНИЕ. Все ссылки на «document.selection» и «createTextRange ()» относятся к IE 8 и ниже ... Скорее всего, вам не нужно поддерживать этого монстра, если вы пытаетесь делать хитрые вещи, подобные этой.
источник
Используя текстовое поле, вы можете использовать это: (через Google)
Вот как я вижу, что большинство сайтов делают это. Они просто стилизуют его с помощью CSS, чтобы он не выглядел как текстовое поле.
источник
this.focus();this.select();
?Этот фрагмент обеспечивает необходимую вам функциональность . Что вам нужно сделать, это добавить событие в тот div, который активирует в нем fnSelect. Быстрый взлом, который вы вообще не должны делать и, возможно, не сработаете, будет выглядеть так:
Очевидно, предполагая, что ссылка на фрагмент была включена.
источник
Я нашел полезным обернуть эту функцию в плагин jQuery:
Таким образом, это становится многоразовым решением. Тогда вы можете сделать это:
И это будет выбран тест в div.
источник
Как насчет этого простого решения? :)
Конечно, это не div-конструкция, как вы упомянули, но все же она работает для меня.
источник
Нико Лэй: Как насчет этого простого решения? :)
.....
Код перед:
Код после:
Только эта часть onclick = "this.select ();" id = "selectable" в моем коде работал нормально. Выбирает все в моем кодовом поле одним щелчком мыши.
Спасибо за помощь Нико Лей!
источник
Ответ выше не работает в Chrome, потому что addRange удаляет предыдущий добавленный диапазон. Я не нашел никакого решения для этого, кроме поддельного выбора с помощью CSS.
источник
Легко достигается с помощью свойства css user-select, установленного на all. Как это:
источник