Идея
На клик удаляем текущую кнопку и вставляем две новые с тем же поведением (делегирование или повторная привязка).
<div id="root"><button type="button" class="spawn">Click</button></div>
const root = document.getElementById('root');
root.addEventListener('click', (e) => {
const btn = e.target.closest('button.spawn');
if (!btn || !root.contains(btn)) return;
const make = () => {
const b = document.createElement('button');
b.type = 'button';
b.className = 'spawn';
b.textContent = 'Click';
return b;
};
btn.replaceWith(make(), make());
});
Почему делегирование
Не нужно вешать слушатель на каждую новую кнопку — событие всплывает к #root.
Итог
replaceWith + event delegation = простой и устойчивый паттерн.