Leere Listen validieren
jojo
- html
3 LX0 MudGuard
Hey.
Auf meiner Seite gibt es ein "Tab"-System und die Inhalte werden per Ajax(jQuery) aktualisiert. Bzw für jeden tab gibt es eine Liste. Deswegen sind diese Listen am Anfang leer <ul></ul>.
Das ist nicht XHTML Transitional valide.
Wie kann ich das lösen?
Gruß, Jojo
Leere Listen, die durch Ajax befüllt werden sollen, stören den Validator?
Ganz einfach: Standardmäßig einen <li> mit einem Link auf die nicht-Ajax-Ansicht der Liste einbinden, den Du ggf. mit JavaScript entfernst, bevor die Liste dargestellt wird. Das hat den wesentlichen Vorteil, dass die Liste auch ohne Ajax noch halbwegs brauchbar bleibt und außerdem ist der Validator zufrieden.
Gruß, LX
@@LX:
nuqneH
Ganz einfach: Standardmäßig einen <li> mit einem Link auf die nicht-Ajax-Ansicht der Liste einbinden, den Du ggf. mit JavaScript entfernst
Das halte ich für unsinnig. Wenn Listenelemente dynamisch erstellt und gelöscht werden, kann die Liste halt auch mal leer sein. Dafür ein Dummy-Element erstellen? Nein. Das hat mit vernünftiger Semantik auch nichts zu tun.
Ich halte <!ELEMENT ul (li)+>
in der Spec für schlecht durchdacht; es sollte <!ELEMENT ul (li)*>
heißen. Ebenso bei 'ol', auch (tr)* bei 'table'/'thead'/'tfoot'/'tbody' und <!ELEMENT tr (th|td)*>
.
Zwei Möglichkeiten:
(1) bewusster Verzicht auf das grüne Licht des Validators. So what?
(2) Dokument als HTML5 deklarieren, da sind leere Listen erlaubt. Irgendwas Gutes muss HTML5 ja mit sich bringen, oder?
Qapla'
PS: Sagte ich gerade: auf Validität verzichten? Ja, ich tat es.
Sagte ich gerade: HTML5 verwenden? Ja, ich tat es.
[latex]Mae govannen![/latex]
Zwei Möglichkeiten:
(1) bewusster Verzicht auf das grüne Licht des Validators. So what?
(2) Dokument als HTML5 deklarieren, da sind leere Listen erlaubt. Irgendwas Gutes muss HTML5 ja mit sich bringen, oder?
(3) Da ohnehin gezwungenermaßen Javascript im Spiel ist, könnte man auch noch die gesamte Liste per JS erzeugen und einhängen bzw. wieder entfernen, statt nur die Einträge einzuhängen.
Cü,
Kai
(3) Da ohnehin gezwungenermaßen Javascript im Spiel ist, könnte man auch noch die gesamte Liste per JS erzeugen und einhängen bzw. wieder entfernen, statt nur die Einträge einzuhängen.
was in jedem Fall die vernünftigere Variante ist.
@@suit:
nuqneH
(3) Da ohnehin gezwungenermaßen Javascript im Spiel ist, könnte man auch noch die gesamte Liste per JS erzeugen und einhängen bzw. wieder entfernen, statt nur die Einträge einzuhängen.
was in jedem Fall die vernünftigere Variante ist.
Nein.
Wenn eine Liste, wo ständig dynamisch Einträge hinzugefügt und gelöscht werden, nun mal temporär keinen Eintrag enthält, wäre es unsinnig, das 'ul'-/'ol'-Element aus dem DOM zu entfernen, um kurz danach wieder eins zu erzeugen und ins DOM einzuhängen.
Manchmal ist ein Sack eben leer. Man sollte ihn nicht wegschmeißen, wenn man ihn wieder füllen will.
Qapla'
PS: „Würde und ein leerer Sack sind nur den Sack wert.“ (Erwebsregel 109)
[latex]Mae govannen![/latex]
Wenn eine Liste, wo ständig dynamisch Einträge hinzugefügt und gelöscht werden, nun mal temporär keinen Eintrag enthält, wäre es unsinnig, das 'ul'-/'ol'-Element aus dem DOM zu entfernen, um kurz danach wieder eins zu erzeugen und ins DOM einzuhängen.
Aber das Einbinden/Entfernen der einzelnen Listenpunkte ist okay? Seltsame Einstellung. Zumal es ggf. ohnehin schneller geht (-> Rendering), die komplette Liste im Hintergrund zu erzeugen und einzuhängen als live n Elemente hinzuzufügen/entfernen
Und selbst wenn: Dann macht man das eben nicht, sondern blendet die einmal per JS erzeugte Liste halt über eine Änderung von className entsprechend ein/aus.
Alles immer noch besser als _nur deshalb_ HTML5 zu benutzen oder die Validität zu ignorieren.
Cü,
Kai
Douglas Crockford über HTML5: I think it is way too big. It has already declared itself as a standard, to the extent that they've criticized Microsoft for being incomplete in their implementation of that standard. It has not gone before W3C yet, it has not been approved by anybody, there has never been any kind of vote or any kind of approval, but they're just insisting that it is the inevitable winner [...] There's some good stuff in it, [...] just that there's good stuff is not justification for something that's that expansive. [...] there's a whole lot of it that I think is way wrong — and start over with something simpler, and try to find some principles which allow us to grow it, and make it more extensible in a way which does not burden us with so much complexity.
Obwohl ich Deine Einstellung zu HTML 5 größtenteils teile, finde ich es nicht wirklich sinnvoll, eine nicht vorhandene Liste nachträglich einzufügen.
Erstens benötigt man dazu entweder einen Platzhalter, der ebensowenig semantisch ist wie eine leere Liste. Insofern ist diese Lösung für die HTML-Semantik kein wirklicher Zugewinn.
Zweitens haben Nutzer ohne JavaScript so keinen Zugriff auf die nachträglich bereitgestellten Inhalte, was die Seite in ihrer Barrierefreiheit deutlich einschränkt.
Natürlich muss jeder selbst entscheiden, wie er sein HTML/CSS/JS selbst strukturiert - aber er sollte wenigstens die Gründe für seine Entscheidungen kennen.
Gruß, LX
[latex]Mae govannen![/latex]
Erstens benötigt man dazu entweder einen Platzhalter, der ebensowenig semantisch ist wie eine leere Liste. Insofern ist diese Lösung für die HTML-Semantik kein wirklicher Zugewinn.
Das kann sicherlich so sein. Hängt aber konkret vom sonstigen HTML ab(1); da dieses hier nicht bekannt ist, kann man dazu wenig sagen. Ein anderes leeres Element einzufügen, um die Liste einzuhängen wäre allerdings Unsinn.
Zweitens haben Nutzer ohne JavaScript so keinen Zugriff auf die nachträglich bereitgestellten Inhalte, was die Seite in ihrer Barrierefreiheit deutlich einschränkt.
Da der OP die Inhalte der „Tabs“ offenbar per „Ajax“ holt, JS also ohnehin aktiv sein muß, bin ich bei meinen Vorschlägen von aktiviertem JS ausgegangen.
Ob das Konzept hier sinnvoll ist oder nicht, kann ich Mangels Kenntnis des Projekts nicht sagen.
Cü,
Kai
(1) d.h. ob an der Stelle, wo die Liste eingesetzt werden soll, bereits anderweitig ein identifizierbares Element vorhanden ist,dem man z.B. per insertBefore die gewünschte Liste folgen oder auch vorausgehen lassen kann.
Hallo, Gunnar!
Natürlich bleibt es jedem selbst überlassen, ob er jetzt schon HTML5 verwenden möchte, das kann ich durchaus unkommentiert akzeptieren.
Bewußt auf Validität zu verzichten ist jedoch ein Vorschlag, den ich nur dann geben würde, wenn ich mir absolut sicher wäre, dass der Empfänger die Gründe dafür gut durchdacht hat und auch versteht.
Gruß, LX
Hi,
Auf meiner Seite gibt es ein "Tab"-System und die Inhalte werden per Ajax(jQuery) aktualisiert. Bzw für jeden tab gibt es eine Liste. Deswegen sind diese Listen am Anfang leer <ul></ul>.
Das ist nicht XHTML Transitional valide.
Dann laß die Liste komplett weg und erstelle sie erst bei Bedarf ...
cu,
Andreas