Ваш скрипт работает до того, как DOM завершит загрузку, то есть до того, как ваш div 'btn' существует.Есть несколько простых решений для этого.Одним из них является перемещение вашего тега сценария внизу тела, например:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="btn">Button Here</div>
<script src="myapp.js"></script>
</body>
</html>
Другое, более эффективное решение, это добавление строки в ваш сценарий, чтобы убедиться, что HTML-код загружен до запуска сценария.
document.addEventListener("DOMContentLoaded", function() {
var element = document.createElement("button");
element.appendChild(document.createTextNode("Click Me!"));
var page = document.getElementById("btn");
page.appendChild(element);
console.log(element);
});
// Corected "meta charset =" UTF-8 "".