Обычно, при программировании стараются сделать чистый код, вынося все лишнее в head, но вынося js код в head из body он просто перестает работать. Возвращаешь все назад, то работает гуд.
В чем проблема ?
В том что браузер читает исходник и выполняя его просто не возвращается к head, а как же тогда функции.
я не мастер в js, но думаю, что код исполняется
просто, когда он выполняется, элементов dom еще нет.
чтобы он выполнился, нужно оформить код в функцию, и вызвать ее тогда, когда элементы dom уже появятся, например, по событию onload для body