Du kannst HTML-Elemente in diesem script-Element mittels http://de.selfhtml.org/javascript/objekte/document.htm#write@title=document.write erzeugen.
Wobei document.write in XHTML (ausgeliefert als application/xhtml+xml bzw. application/xml) nicht funktionieren wird.
Ja, aber wer will das und wer tut das schon? Die Gegenwart ist HTML-kompatibles XHTML und die Zukunft wird eher HTML 5 sein.
Aus dem Grund sind ggf. andere Möglichkeiten (z.B. http://de.selfhtml.org/javascript/objekte/all.htm#inner_html@title=innerHTML) interessanter, document.write sollte man sich garnicht mehr angewöhnen.
document.write ist nicht schön, aber XHTML ist das schlechteste Argument. Mit document.write verschweißt man JavaScript-Logik mit dem HTML-Dokument, sinnvoll wäre aber eine Trennung unter dem Konzept des Unobtrusive JavaScript.
innerHTML ist aber wiederum das Gegenteil. Ich sehe allerdings auch keinen Fortschritt darin, eine Menge nicht-variablen HTML-Code in einem ausgelagerten JavaScript unterzubringen und den dann beim Laden direkt ins Dokument rüber zu schieben. Dass das in XHTML funktioniert, ist im Grunde auch nur ein Hack.
Wenn man diese Dropdown-Navigation unobtrusive schreiben will, hat man im Grunde zwei Möglichkeiten:
1. Man macht daraus ein vollwertiges Formular, das im Falle von deaktiviertem JavaScript ein serverseitiges Script ansteuert, ihm eine URL übermittelt, sodass das Script einfach zu dieser weiterleitet.
Nachteile:
Man »versteckt« Hyperlinks hinter einer komplizierten Aufklapp-Logik. Diese Links sind schlecht zugänglich, man missbraucht ein Formularfeld für eine Linkliste, nur um die Aufklapp-Logik zu bekommen.
Vorteile:
Es ist ein browsereigenes Widget, was ziemlich zuverlässig bedienbar ist. Es ist dem Benutzer vertraut, funktioniert robust, ist mit der Tastatur ansteuerbar.
2. Die klassische Unobtrusive-Lösung: Man bringt im HTML-Code nur eine Linkliste unter und macht bei aktiviertem JavaScript automatisch eine Aufklapp-Navigation daraus.
Nachteile:
Anstelle einer JavaScript-Codezeile tritt eine eigene Wissenschaft, das Script wird umfangreich und kompliziert. Es ist ziemlich schwer, so ein Widget zugänglich und gut bedienbar zu machen, es ist nie so robust bedienbar wie ein select. Es ist viel Styling notwendig, um es nach einem Aufklapp-Widget aussehen zu lassen.
Vorteile:
Das Markup ist simpel und gut abwärtskompatibel. Die Links sind, wenn man es richtig macht, immer zugänglich.
Diese beiden Alternativen halte ich nicht unbedingt für besser als die hier beschriebene, die document.write und noscript mit einer abwärskompatiblen Linkliste verwendet. Diese Lösung ist einfach, recht robust, und die Vermischung von JavaScript und HTML hält sich in Grenzen.
Mathias