Показать сообщение отдельно
  #1 (permalink)  
Старый 26.06.2016, 21:12
Аспирант
Отправить личное сообщение для eddin Посмотреть профиль Найти все сообщения от eddin
 
Регистрация: 11.10.2010
Сообщений: 60

Добрый день. Есть скрипт, который добавляет ссылку при копировании.
Добрый день.
Есть скрипт, который добавляет ссылку при копировании. Но после того, как копирование произошло, в браузере слетает выделение ранее выделенного текста. Как я понимаю, это происходит из-за "selectAllChildren". Можно как-то этого избежать, чтобы выделение не слетало?
Просто у меня пока есть только вариант, что надо определить и запомнить позицию изначального выделения, чтобы затем его вернуть с помощью addRange. Например, вот:
<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>-</title>
 </head>
 <body>
<script type="text/javascript">
function addLink() {

    var selection = window.getSelection(),
        pagelink = '<br /><br /> Read more at: ' + document.location.href,
        copytext = selection + pagelink,
        newdiv = document.createElement('div');

    newdiv.style.position = 'absolute';
    newdiv.style.left = '-99999px';

    document.body.appendChild(newdiv);
    newdiv.innerHTML = copytext;
    selection.selectAllChildren(newdiv);

    window.setTimeout(function () {
        document.body.removeChild(newdiv);
    }, 100);

 var range = document.createRange(),
	 elem = document.getElementById("sel_range");

	 range.setStart(elem.firstChild, 0);
	 range.setEnd(elem.firstChild, 15);
	 selection.removeAllRanges();
	 selection.addRange(range);
}

document.addEventListener('copy', addLink);

</script>
<p id="sel_range">текст текст текст</p>
<p>текст текст текст</p>
<p>текст текст текст</p>
<p>текст текст текст</p>
 </body>
</html>

Но что-то не могу сообразить как получить setStart и setEnd не для конкретного, а для произвольного выделения на странице, без привязки к ID элементов и с учетом того, что выделение может затрагивать несколько элементов.
А может всё же можно всё еще проще сделать?

UPD: Только что обнаружил, что в связи с добавлением в функцию части кода, отвечающего за повторное выделение, перестало работать добавление ссылки, пока не пойму почему.
ps Название в тему не добавилось почему-то, вроде не забыл его добавить при создании...

Последний раз редактировалось eddin, 26.06.2016 в 21:24.
Ответить с цитированием