Исключение добавления ссылки, если выделен текст в теге <pre>
Доброго времени суток, уважаемые специалисты.
Имеется такой замечательный скрипт: document.addEventListener('copy', (event) => { const container = document.querySelector('#content'); const selection = document.getSelection(); const text = selection.toString(); if( text.length >= 50 && ( container.contains(selection.anchorNode) || container.contains(selection.focusNode) ) ) { event.clipboardData.setData('text/plain', `${text}\nИсточник: ${document.location.href}`); event.preventDefault(); } }); Подскажите, пожалуйста, как можно в него добавить исключение на срабатывание, если выделен текст (или если даже часть выделенного текста находится в теге (а часть вне тега)), который находится в тегах <pre>... </pre> Тег может быть без класса, а может быть и с классом <pre class="nekoe_imya">... </pre> |
12345678,
строка 5 let el = selection.getRangeAt(0).cloneContents(); if(el.querySelector('pre')) return; |
рони, спасибо, что откликнулись. Я добавил строчки, если текст захватывается, который в pre, то не добавляется ссылка, а если же выделяется чисто текст, что находится в pre, то добавляется. А как сделать, чтобы в последнем случае тоже не добавлялась?
<div id="content"> <p>Самая мощная в мире ветряная турбина запущена в опытную эксплуатацию. Установка Vestas V236-15 MW собрана для оценки эксплуатационных характеристик на полигоне в Эстерильд в Западной Ютландии.</p> <div class="code-wrap" data-tip="Двойной клик для выделения кода"> <pre class="code-clear">Тут текст, при выделении которого не должен срабатывать скрипт вставки ссылки на источник при копировании в буфер обмена.</pre> </div> <p>Диаметр ротора установки составляет 236 м при длине лопастей 115,5 м. Вырабатываемая на пике мощность достигает 15 МВт. На основе этой установки разработаны проекты целого ряда морских ветроэлектростанций в Европе и США.</p> </div> <script> var ua = window.navigator.userAgent; var isIE = /MSIE|Trident/.test(ua); if ( !isIE ) { document.addEventListener('copy', (event) => { const container = document.querySelector('#content'); const selection = document.getSelection(); const text = selection.toString(); let el = selection.getRangeAt(0).cloneContents(); if(el.querySelector('pre')) return; if( text.length >= 10 && ( container.contains(selection.anchorNode) || container.contains(selection.focusNode) ) ) { event.clipboardData.setData('text/plain', `${text}\nИсточник: ${document.location.href}`); event.preventDefault(); } }); }; </script> |
12345678,
18 - 19 заменить на let el = selection.containsNode(document.querySelector('.code-clear'), true); if(el) return; |
рони, спасибо за ответ.
Выяснилась ещё одна проблемка - если на странице больше одного блока <pre>, то скрипт для последующих всё равно добавляет ссылку. |
Цитата:
for (let node of document.querySelectorAll('.code-clear')) if(selection.containsNode(node, true)) return; |
рони
Спасибо большое :dance: Теперь идеально. |
Часовой пояс GMT +3, время: 08:07. |