Проблема здесь в том, что firstChild и nextSibling возвращают текстовые узлы и элементы.Итак, вы выбираете текстовый узел между ul и li.Поэтому, чтобы обойти это, используйте версии селектора элементов, которые пропускают текстовые узлы.
var el = document.getElementById("aufgaben");
var kind = el.firstElementChild;
var i = 0;
while (kind) {
kind.style.backgroundColor = "orange";
kind = kind.nextElementSibling;
i++;
}
<ul id="aufgaben">
<li class="offen">aufgabe1<a href="#"> erledigen</a></li>
<li class="offen">aufgabe2<a href="#"> erledigen</a></li>
<li class="offen">aufgabe3<a href="#"> erledigen</a></li>
<li class="offen">aufgabe4<a href="#"> erledigen</a></li>
</ul>
Чтобы сделать это с помощью своего кода, вам необходимо проверить тип узла
var el = document.getElementById("aufgaben");
var kind = el.firstChild;
var i = 0;
while (kind) {
if(kind.nodeType==1) { // make sure it is an element node
kind.style.backgroundColor = "orange";
}
kind = kind.nextSibling;
i++;
}
<ul id="aufgaben">
<li class="offen">aufgabe1<a href="#"> erledigen</a></li>
<li class="offen">aufgabe2<a href="#"> erledigen</a></li>
<li class="offen">aufgabe3<a href="#"> erledigen</a></li>
<li class="offen">aufgabe4<a href="#"> erledigen</a></li>
</ul>