From 5820838ad835a7efe024faa6ce743889c90324bb Mon Sep 17 00:00:00 2001 From: fruworg Date: Wed, 2 Aug 2023 22:25:41 +0600 Subject: [PATCH] js --- static/js/copy.js | 66 ++++++++++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/static/js/copy.js b/static/js/copy.js index 8e5c71c..617b9f5 100644 --- a/static/js/copy.js +++ b/static/js/copy.js @@ -1,28 +1,42 @@ -// Получаем элементы, с которыми будем работать -const codeElement = document.querySelector('.highlight code'); -const spanElement = codeElement.querySelector('span span'); +// Получаем все элементы с классом "highlight" +const codeElements = document.querySelectorAll('.highlight'); -// Добавляем обработчик события на ::before псевдоэлемент -codeElement.addEventListener('click', () => { - // Создаем временный элемент textarea - const tempTextarea = document.createElement('textarea'); - - // Устанавливаем значение текста в textarea равным тексту из span - tempTextarea.value = spanElement.textContent; - - // Добавляем textarea в документ (необходимо, чтобы метод .select() сработал) - document.body.appendChild(tempTextarea); - - // Выделяем текст в textarea - tempTextarea.select(); - - // Копируем выделенный текст в буфер обмена - document.execCommand('copy'); - - // Удаляем временный элемент textarea - document.body.removeChild(tempTextarea); - - // Можно добавить визуальную обратную связь для пользователя, например, изменить стиль ::before - // codeElement.style.setProperty('content', '"Copied!"'); - // setTimeout(() => codeElement.style.removeProperty('content'), 1000); +// Добавляем обработчик события на каждый элемент с классом "highlight" +codeElements.forEach((highlightBlock) => { + // Находим элемент с тегом "code" внутри текущего блока "highlight" + const codeElement = highlightBlock.querySelector('code'); + + // Находим все span-элементы внутри блока + const spanElements = highlightBlock.querySelectorAll('span'); + + // Создаем текст, объединяя содержимое всех span-элементов внутри текущего блока "highlight" + let combinedText = ''; + spanElements.forEach((spanElement) => { + combinedText += spanElement.textContent; + }); + + // Добавляем обработчик события на клик по элементу "code" + codeElement.addEventListener('click', () => { + // Создаем временный элемент textarea + const tempTextarea = document.createElement('textarea'); + + // Устанавливаем значение текста в textarea равным объединенному тексту + tempTextarea.value = combinedText; + + // Добавляем textarea в документ (необходимо, чтобы метод .select() сработал) + document.body.appendChild(tempTextarea); + + // Выделяем текст в textarea + tempTextarea.select(); + + // Копируем выделенный текст в буфер обмена + document.execCommand('copy'); + + // Удаляем временный элемент textarea + document.body.removeChild(tempTextarea); + + // Можно добавить визуальную обратную связь для пользователя, например, изменить стиль ::before + // codeElement.style.setProperty('content', '"Copied!"'); + // setTimeout(() => codeElement.style.removeProperty('content'), 1000); + }); }); \ No newline at end of file