Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.03.2022, 17:22
Интересующийся
Отправить личное сообщение для Sice Посмотреть профиль Найти все сообщения от Sice
 
Регистрация: 16.06.2014
Сообщений: 23

Как скопировать текст ссылки при нажатии ?
Доброго времени суток, друзья. Вот таким образом пытаюсь при нажатии на ссылку поместить текст ссылки в буфер обмена, но ничего не выходит:
<html>
    <head>
        <title>Test Page</title>    
    </head>
    <body>
        <main>
<a id='copy' href='/category.php'>Этот текст нужно скопировать в буфер обмена</a>

<script>
    const copy = document.querySelector('#copy');
    copy.addEventListener('click',
      function(event) {
        const text = document.querySelector('#copy');
        text.select();
        document.execCommand('copy');
      });    
</script>

        </main>
    </body>
</html>

Подскажите пожалуйста, как правильно скопировать текст ссылки в буфер обмена и вывести сообщение о том, что она скопирована. Не важно на чистом JS или jQuery. Любой вариант подойдет. Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 25.03.2022, 17:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Sice,
<!DOCTYPE html>
<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
</head>

<body>
    <main>
        <a id='copy' href='/category.php'>Этот текст нужно скопировать в буфер обмена</a>
        <script>
            const copy = document.querySelector('#copy');
            copy.addEventListener('click',
                function(event) {
                    event.preventDefault();
                    const text = document.querySelector('#copy');
                    navigator.clipboard.writeText(text.textContent);
                });
        </script>
    </main>
</body>

</html>
Ответить с цитированием
  #3 (permalink)  
Старый 25.03.2022, 17:58
Интересующийся
Отправить личное сообщение для Sice Посмотреть профиль Найти все сообщения от Sice
 
Регистрация: 16.06.2014
Сообщений: 23

Спасибо огромное! Прочитал уже, что execCommand('copy');
устарел. А подскажите, как всплывающее сообщение сделать, что оно исчезло через 1-2 секунды?
Ответить с цитированием
  #4 (permalink)  
Старый 25.03.2022, 18:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

navigator.clipboard копирование в буфер обмена
Sice,
<!DOCTYPE html>
<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
        .attention {
            display: none;
        }

        .attention.open {
            display: block;
        }
    </style>
</head>

<body>
    <main>
        <a id='copy' href='/category.php'>Этот текст нужно скопировать в буфер обмена</a>
        <div class="attention">Скопировано</div>
        <script>
            const text = document.querySelector('#copy'),
                div = document.querySelector('.attention');
            text.addEventListener('click',
                function(event) {
                    event.preventDefault();
                    navigator.clipboard.writeText(text.text);
                    window.clearTimeout(text.timer);
                    div.classList.add('open');
                    text.timer = window.setTimeout(_ => div.classList.remove('open'), 1500)
                });
        </script>
    </main>
</body>

</html>
Ответить с цитированием
  #5 (permalink)  
Старый 25.03.2022, 20:59
Интересующийся
Отправить личное сообщение для Sice Посмотреть профиль Найти все сообщения от Sice
 
Регистрация: 16.06.2014
Сообщений: 23

Сообщение от рони Посмотреть сообщение
Sice,
<!DOCTYPE html>
<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
        .attention {
            display: none;
        }

        .attention.open {
            display: block;
        }
    </style>
</head>

<body>
    <main>
        <a id='copy' href='/category.php'>Этот текст нужно скопировать в буфер обмена</a>
        <div class="attention">Скопировано</div>
        <script>
            const text = document.querySelector('#copy'),
                div = document.querySelector('.attention');
            text.addEventListener('click',
                function(event) {
                    event.preventDefault();
                    navigator.clipboard.writeText(text.text);
                    window.clearTimeout(text.timer);
                    div.classList.add('open');
                    text.timer = window.setTimeout(_ => div.classList.remove('open'), 1500)
                });
        </script>
    </main>
</body>

</html>
Спасибо за помощь! Столкнулся с проблемой, что в PHP, в цикле если их выводить не работает. Насколько я помню ID должен быть для каждой ссылки уникальный ?

Тогда как мне быть ? чтобы все они копировались по нажатию ?

Делаю так:
<?php
$coins[0]['name'] = "Adena";
$coins[1]['name'] = "Oren";
$coins[2]['name'] = "Giran";

echo "<br>";

for($i=0; $i < 3; $i++) {
   echo "<a id='copyticker' href='#'>".$coins[$i]['name']."</a>" . "<br>"; 
}

?>

<script>
    const copy = document.querySelector('#copyticker');
    copy.addEventListener('click',
        function(event) {
            event.preventDefault();
            const text = document.querySelector('#copyticker');
            navigator.clipboard.writeText(text.textContent);
        });  
</script>
Ответить с цитированием
  #6 (permalink)  
Старый 27.03.2022, 17:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от Sice
echo "<a id='copyticker'
id замените на class
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <style type="text/css">
     .copyticker.copy:after{
      content: ' Скопировано';
        }
    </style>
</head>
<body><br><a class="copyticker" href="#">Adena</a><br><a class="copyticker" href="#">Oren</a><br><a class="copyticker" href="#">Giran</a><br>
    <script>
        document.addEventListener('click',
            function(event) {
                let target = event.target.closest('.copyticker');
                if (target) {
                    event.preventDefault();
                    navigator.clipboard.writeText(target.textContent);
                    window.clearTimeout(target.timer);
                    target.classList.add('copy');
                    target.timer = window.setTimeout(_ => target.classList.remove('copy'), 1500)
                }
            });
    </script>
</body>
</html>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
А где сказано, что ::before нельзя выделять? voraa (X)HTML/CSS 7 24.11.2021 21:42
При клике ссылки, открыть DIV блок, и при клике ещё раз, закрыть его Simon Общие вопросы Javascript 59 28.05.2017 17:31
Toggle эффект блока с кнопкой "Читать дальше". С меня "+" subbziro Общие вопросы Javascript 10 28.12.2016 01:43
Выпадающий текст при нажатии на ссылку wisewarrior Элементы интерфейса 1 10.09.2015 09:25
Выравнять три дива в одной строке debugx (X)HTML/CSS 9 06.10.2011 12:03