Я немного изменил ваш код - но вам может помочь следующее. Запустите фрагмент кода.
Обратите внимание, я изменил способ обратного вызова в html. Возможно, вы захотите изменить это обратно на svelte.
Обновление: что не так с вашим кодом
Обратный вызов, который вы прикрепили к кнопкам, сам прикреплял обратный вызов к кнопкам. Я не знаю много о svelte, но я знаю это: в ваших обратных вызовах вы получаете ссылку на кнопку, а затем прикрепляете обратный вызов. Это кажется неправильным. Вы должны либо прикрепить обратный вызов в javascript вне вызовов любой функции, поэтому он присоединяется при загрузке скрипта javascript, либо вы присоединяете его в html - это более приятный вариант и то, что я здесь сделал. Опять же, в обратных вызовах, которые вы прикрепили к кнопкам html, вы добавляли обратный вызов к кнопкам. Это имеет смысл?
function copyMD(){
document.querySelector("textarea").select();
document.execCommand('copy');
}
function copyOP(){
// apparently select only works for text area and docment.execCommand I think it deprecated.
const output = document.getElementById("output").innerHTML;
// the navigator object in a browser holds lots of useful utilities, such as location services and clipboard interface.
const theClipboard = navigator.clipboard;
// write text returns a promise, so use `then` to react to success
theClipboard.writeText(output).then(() => console.log('copied to clipboard'));
}
<div class="markdown-editor">
<div class="markdown-editor_left-panel">
<textarea bind:value={source} name="source" class="markdown-editor_source"></textarea>
</div>
<div class="markdown-editor_right-panel">
<div class="markdown-editor_output" id="output">{@html markdown}</div>
</div>
</div>
<div class="buttons">
<!-- I change this to onclick so it would work in stack overflow, perhaps you can put this back to svelte syntax -->
<button class="btn" onclick="copyMD()">Copy Markdown</button>
<!-- I change this to onclick so it would work in stack overflow, perhaps you can put this back to svelte syntax -->
<button class="btn" id="btn2" onclick="copyOP()">Copy Output</button>
</div>