Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Выделение текста (https://javascript.ru/forum/events/65621-vydelenie-teksta.html)

Ezhuroff 30.10.2016 10:34

Выделение текста
 
Привет!)
Подскажите, пожалуйста, как можно реализовать выделение текста? Например, при нажатии на кнопку share, появляется pop-up окно, в котором находится ссылка. Как сделать такое окно я знаю, а как сделать так, чтобы эта ссылка появлялась уже выделенной?

Aetae 30.10.2016 14:04

Вам нужно именно выделить текст, или таки поставить фокус на ссылку?
Если второе, то element.focus().
Если первое, то для современных браузеров понадобится Selection, для ie<9 TextRange.

Ezhuroff 31.10.2016 16:53

Хм, вот тут вы меня озадачили))
Вообще, строго говоря, надо реализовать копирование ссылки. Пользователь жмет на кнопку share, при этом происходит копирование ссылки в буфер обмена, появляется popup-окно, в котором написана эта самая ссылка и она выделена - просто так же, как выделяется обычный текст в текстовом документе или в браузере. То, что появляется popup-окно с выделенной ссылкой - это, в принципе, не функциональная, а чисто интерфейсная заморочка. Главное, чтобы ссылка копировалась.
Пробовал разобраться с selection, но как-то, видимо, недопонимаю я этот объект, что-то не хочет работать. Но это ладно, пораскину мозгами еще.
Вообще я же правильно понимаю, для того, что я описал - нужен именно selection? element.focus() Здесь вроде ведь не нужен?

рони 31.10.2016 17:13

Ezhuroff,
Установка собственного выделения
Чтение и копирование выделенного текста в буфер обмена с помощью JS

Aetae 31.10.2016 18:09

Цитата:

Сообщение от Ezhuroff (Сообщение 433599)
Вообще я же правильно понимаю, для того, что я описал - нужен именно selection? element.focus()

Да. Примерно так:
<input type="button" value="copy" onclick="openCopyWindow('http://ya.ru')">
<script>
function openCopyWindow(link){
  var document = window.open('', '', 'width=600,height=100').document;
  document.write('<p align="center">', link); 
  document.close();
  if('getSelection' in document) document.getSelection().selectAllChildren(document.body);
  else document.body.createTextRange().select();
}
</script>
Только, имхо, расточительно открывать новое окно ради этого, лучше выделять прямо на странице.
Ну и само собой использовать сразу копирование в буффер, там где это поддерживается.

Ezhuroff 03.11.2016 17:46

Всем спасибо за ответы и ссылки, попробую реализовать!


Часовой пояс GMT +3, время: 12:34.