Ubivectel,
как вариант...
let touch_yy, touch_xx;
document.addEventListener("touchstart", (event) => {
let target = event.target;
if (target = target.closest('.KIDE_quote')) {
touch_yy = event.changedTouches[event.changedTouches.length - 1].clientY;
touch_xx = event.changedTouches[event.changedTouches.length - 1].clientX;
}
})
document.addEventListener("touchend", (event) => {
let target = event.target;
if (target = target.closest('.KIDE_quote')) {
let swap = (Math.abs(touch_yy - event.changedTouches[event.changedTouches.length - 1].clientY) > 30 || Math.abs(touch_xx - event.changedTouches[event.changedTouches.length - 1].clientX) > 30)
if (swap) {
target = target.closest('.KIDE_msg_top');
target.classList.add('swiped');
setTimeout(function () {
target.classList.remove('swiped');
}, 300);
let clon = target.cloneNode(true); // Делаем копию узла с потомками
clon.querySelectorAll(".KIDE_quote").forEach(el => el.remove()); // Удаляем из копии все span.KIDE_msg
let text = clon.textContent.trim(); // Берем текст из клона
if (text.length > 60) text = text.slice(0, 60) + '...'
kide.insertSmile(`[QUOTE]${text}[/QUOTE]\n`); // ставляем текст в инпут
}
}
})