Utz: (HTML) Verschachtelungsproblem Table mit Script und Noscript

Hallo zusammen,

ich habe z.Zt. massenweise Kostrukte wie dieses:

<table>
(...)
<script type="text/javascript">
if (bla == blubb) document.write('<tr><td>...Dieser Inhalt...</td></tr>');
else document.write ('<tr><td>...Anderer Inhalt...</td></tr>');
</script>
<noscript><tr><td>...Ganz anderer Inhalt...</td></tr></noscript>
(...)
</table>

Was natürlich kein valides HTML ist. Es gibt zwar keine Probleme damit, ich möchte es aber trotzdem zu validem HTML umbauen. Aktueller Stand ist:

<table>
(...)
<tr><td><script type="text/javascript">if (bla == blubb) document.write('...Dieser Inhalt...');
else document.write ('...Anderer Inhalt...');</script><noscript>...Ganz anderer Inhalt...</noscript></td></tr>
(...)
</table>

Das ist validierbar, bringt aber ein Problem mit sich: Anscheinend sieht das für die Browser so aus, als sei zwischen <td>, dem was dann drinsteht und </td> jeweils(?) ein Leerzeichen - was in meinem Fall zu unschönen Zeilenumbrüchen und damit zu unschönen zusätzlichen, aber sinnloses Zeilen führt.

Hat jemand noch ne Idee wie ich das weg kriegen könnte? Bzw. wie so ein Konstrukt valide und ohne diesen Effekt hinzukriegen wäre, unter der Maßgabe dass _nicht_ die ganze Tabelle mit JavaScript bzw. via noscript geschrieben werden kann?

Grüße,

Utz

  1. Hallo Utz,

    versuch's mal so:

    <table>
    <tr><td id="tabellenzelle1">Noscript-Inhalt</td></tr>
    </table>

    <script type="text/javascript">
    <!--
    bla = "a";
    blubb = "b";

    inhalt1 = "Dieser Inhalt";
    inhalt2 = "Anderer Inhalt";

    if (document.getElementById) {
      element = document.getElementById("tabellenzelle1");
      while (element.hasChildNodes())
        element.removeChild(element.firstChild);

    if (bla == blubb)  element.appendChild(document.createTextNode(inhalt1));
      else  element.appendChild(document.createTextNode(inhalt2));
    } else if (document.all) {
      if (bla == blubb)  document.all.tabellenzelle1.innerHTML = inhalt1;
      else  document.all.tabellenzelle1.innerHTML = inhalt2;
    }
    //-->
    </script>

    Funktioniert allerdings nicht in NC4. Vielleicht findest du für den ja noch eine andere Möglichkeit.

    Viel Erfolg,
    Robert

    1. Hallo Robert,

      daran hatte ich tatsächlich noch nicht gedacht, vielen Dank! Vermutlich deshalb, weil's in der bisherigen Variante mit NS4 ging und auch zukünftig gehen sollte - und weil sich in diesem konkreten Zusammenhang auch die Arbeit mit Layern bzw. positionierten Elementen verbietet, womit ich ja den NS4 "überredet" gekriegt hätte. Der "verhindert" im übrigen auch, dass ich die mit weniger Umbau verbundene Variante - nämlich per CSS einfach die line-height herunterzuschrauben - noch nicht mal probiert habe, da ich ja weiß dass im NS4 dieses line-height auch auf Bilder angewandt wird, und in diesem konkreten Fall sind Bilder der relevante Zelleninhalt. Es ist wirklich zum Haareausraufen... :-)

      Wobei: eine Variante fällt mir da noch ein, die auf Deinem Vorschlag basiert. In der tatsächlichen Tabelle zwischen Script für NS4 und Noscript unterscheiden, den Rest dann mit DOM bzw. document.all machen - dann würde wenigstens nur der NS4 die störenden Zeilenumbrüche anzeigen. Werd ich mal probieren...

      Grüße,

      Utz