Moin Moin!
Interessant, wenn alle ein Date haben läuft die Schleife wunderbar durch, aber wieso?
Ansich ist die Bedingung für die While-Schleife ja nicht erfüllt wenn er auf den ersten "a" ohne ein date trifft.
Nö, wieso? Die Laufbedingung für die while-Schleife ist i<=document.links.length
, wobei i für jeden Link hochgezählt wird. (Ganz nebenbei: Du willst i nur bis document.links.length-1 laufen lassen.) Von irgendeiner Prüfung, ob das Link-Element irgendwelche Attribute hat, steht da nichts.
Der zweite Link hat kein "date"- bzw. "data-date"-Attribut, das führt dazu, dass die Variable datum nach der Zuweisung datum=document.links[i].date bzw. datum=document.links[i].getAttribute("data-date") undefiniert ist. Und auf undefinierten Werten kann man nicht toString() aufrufen.
Oder nimmt es Javascript mit dem Errorhandling so genau?...
Javascript arbeitet wie alle anderen Sprachen, mit denen Du einen Computer programmierst. Sie tun das, was Du geschrieben hast, nicht das, was Du meinst. Auch wenn Javascript in der Regel interpretiert wird, heißt das nicht, dass der Computer rät, was Du willst.
Naja egal, es funktioniert ja jetzt aber wie kann ich es umgehen, dass ich in jedem Link ein date einfügen muss? Ich will ja nicht alle Links mit einem Date versehen. Würde da ein reines if (date="") reichen? Dürfte ja eigentlich nicht da er das Date nicht findet und dann wieder mit einem Error abbricht.
So in der Art. Dir fehlt so etwas wie if (!datum) continue;
, was bei fehlendem Datumswert weiterspringt, bzw. if (datum) { arbeite mit datum }
. Weil Du die übliche for-Schleife unbedingt durch while ersetzen mußtest, wird der einfachere Weg mit continue nicht funktionieren, weil i dann nicht erhöht wird. Und Du willst i nicht an zwei verschiedenen Stellen erhöhen.
Versuch's mal mit for und continue, das halte ich für die sauberste Variante:
for (i=0; i<document.links.length; i++) {
datum=document.links[i].getAttribute("data-date");
if (!datum) continue;
}
Alexander
--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".