Как я могу: выбрать абзац с помощью JavaScript (при нажатии)?

Можно ли выделить весь текст и элемент (например, абзац <p>) с помощью JavaScript? Многие думают, что jQuery .select() сделает это, но это не так. Он просто запускает событие. Обратите внимание, что объекты DOM для <input> элементов имеют собственный метод select(), но большинство других элементов (таких как <output> и <p>) не имеют.

(Мне нужно использовать content-editable, чтобы это работало?)


person Alan H.    schedule 22.08.2014    source источник
comment
Как это выбрать? Выберите содержимое с помощью .html() или .text() или выделите текст, как если бы вы это делали с помощью мыши, перетаскивая?   -  person j08691    schedule 23.08.2014
comment
@ j08691 Вероятно, выделение, поскольку OP говорил о выборе содержимого <input />   -  person Juan Mendes    schedule 23.08.2014
comment
stackoverflow.com/a/2044793/96100, stackoverflow.com/a/2838358/96100   -  person Tim Down    schedule 23.08.2014


Ответы (2)


Если вам нужна поддержка более поздних браузеров, например IE9 +, вы можете использовать следующие

document.querySelector('button').addEventListener('click', function(){
    var range = document.createRange();
    var selection = window.getSelection();
    range.selectNodeContents(document.querySelector('p'));
    
    selection.removeAllRanges();
    selection.addRange(range);
});
                                          
                                          
                                          
                                          
Hello <p>Select me</p> World
<button id ='btn'>Select text</button>

Ссылки по теме:

Для поддержки во всех браузерах см. https://github.com/timdown/rangy из https://stackoverflow.com/users/96100/tim-down

person Juan Mendes    schedule 22.08.2014
comment
потрясающе, фантастично, что для этого не требуется contenteditable. Кроме того, основные реквизиты для включения фрагмента кода, ссылок на спецификации, рабочего скрипта, ссылок на дополнительную информацию! Ответ +++ - person Alan H.; 26.08.2014

select() Будет работать только с <input> и <textarea> элементами ...

Также да, вам придется использовать:

contenteditable="true"

И используйте .focus(), чтобы выделить весь текст.

Попробуй это:

<p id="editable" contenteditable="true" 
onfocus="document.execCommand('selectAll',false,null);">Your Text Here</p>

<button onclick="document.getElementById('editable').focus();" >Click me</button>

JSFiddle Demo

person imbondbaby    schedule 22.08.2014
comment
Это не выделяет текст для меня в Chrome. См. Мой ответ stackoverflow.com/a/25456308/227299 - person Juan Mendes; 23.08.2014
comment
Ваш jsFiddle работал у меня только тогда, когда редактируемый абзац уже был сфокусирован, что натолкнуло меня на идею использовать window.setTimeout, чтобы позволить команде focus завершиться первой. Успех. Вот моя вилка вашей скрипки: jsfiddle.net/alanhogan/nfqx0ex2 - person Alan H.; 26.08.2014