Помогите со скриптом копирования текста js html
Есть код который по нажатию копирует текст в блоке своего класса.
<div class="sku">Текст, который копируем по клику на этот блок</div>
const sku = document.querySelector(".sku");
async function skuCopyClick(text) {
try {
await navigator.clipboard.writeText(text);
} catch (error) {
console.error("Что то пошло не так: ", error);
}
}
if (sku !== null) {
sku.addEventListener("click", (e) => {
console.log(e);
skuCopyClick(e.target.innerText);
const myNotice = document.createElement("p");
myNotice.innerText = "Скопировано!";
myNotice.style.color = "red";
if (sku.parentElement) {
const parentElement = sku.parentElement;
parentElement.appendChild(myNotice);
window.setTimeout(function () {
parentElement.removeChild(myNotice);
}, 2000);
} // TODO else
//console.log(parentElement);
});
}
А нужно размножить количество блоков и чтобы копировало по клику то, что в этом блоке. Возможно у кого есть готовое решение, не обязательно этот код пилить, может есть другой.
Заранее спасибо. Заранее благадарен.
Ответы (1 шт):
Автор решения: ksa
→ Ссылка
нужно размножить количество блоков и чтобы копировало по клику то, что в этом блоке.
Предложу такой вариант... Только тут в песочнице возможно не даст копировать.
document.querySelectorAll(".sku")?.forEach(sku => {
sku.addEventListener("click", fnc(sku));
});
async function skuCopyClick(text) {
try {
await navigator.clipboard.writeText(text);
return 1
} catch (error) {
//console.error("Что то пошло не так: ", error);
return 2
}
}
function fnc(sku) {
const arr = ['Есть проблема', "Скопировано!", 'Нет текста']
return async e => {
let v = e.target.innerText
v = v ? await skuCopyClick(v): 2;
const myNotice = document.createElement("p");
myNotice.innerText = arr[v];
myNotice.style.color = "red";
sku.insertAdjacentElement('afterend', myNotice)
setTimeout(_ => myNotice.remove(), 2000);
}
}
.sku {
padding: 10px;
border: 1px solid;
}
<div class="sku">Текст 1, который копируем по клику на этот блок</div>
<div class="sku">Текст 2, который копируем по клику на этот блок</div>
<div class="sku"></div>
<div class="sku">Текст 3, который копируем по клику на этот блок</div>
<div class="sku">Текст 4, который копируем по клику на этот блок</div>