bex66: Tabelle und div

Hallo,

ich möchte in einer Tabelle mit festen Zeilen noch einen dynamischen Bereich mit beliebig per Ajax nachladbaren Zeilen einstellen:

<table>
 <tr>
  <td>aaa</td>
  <td>bbb</td>
 </tr>
 <div id="weitere_zeilen" />
</table>

Bei bestimmten Aktionen wird auf dem Server ein php-Script ausgeführt, welches entsprechenden "Tabellencode" zurückgibt, so daß dieser im div angezeigt wird.

Die Ausgabe des PHP lautet also:
"<tr><td>ccc</td><td>ddd</td></tr>"

Natürlich können noch mehrere Zeilen im String enthalten sein.

So war die Idee - klappt nur nicht. Die dynamischen Zeilen werden nicht in der Tabelle sondern darüber angezeigt.

Gibt's da eine Möglichkeit, dieses Problem zu lösen?

Gruß & Dank,
bex66

  1. Hi,

    <table>
    <tr>
      <td>aaa</td>
      <td>bbb</td>
    </tr>
    <div id="weitere_zeilen" />
    </table>

    diese Schachtelung ist in (X)HTML nicht zulässig: Ein div-Element darf nicht als Kind von table auftreten. Andernfalls bleibt es der Fehlerkorrektur des Browsers überlassen, was er damit anstellt. Der IE zieht solche Bröckchen dann beispielsweise vor den Anfang der Tabelle.

    Bei bestimmten Aktionen wird auf dem Server ein php-Script ausgeführt, welches entsprechenden "Tabellencode" zurückgibt, so daß dieser im div angezeigt wird.
    Die Ausgabe des PHP lautet also:
    "<tr><td>ccc</td><td>ddd</td></tr>"

    Dann hättest du also im Endeffekt sowas hier:

    <table>
    <tr>
      <td>aaa</td>
      <td>bbb</td>
    </tr>
    <div id="weitere_zeilen">
    <tr>
      <td>ccc</td>
      <td>ddd</td>
    </tr>
    </div>
    </table>

    Und das ist immer noch falsch.

    Gibt's da eine Möglichkeit, dieses Problem zu lösen?

    Ja: Bau das div-Element gleich von Anfang an korrekt in ein td ein. Dann musst du innerhalb des div natürlich wieder eine vollständige Tabelle erzeugen. Und eigentlich kannst du dann auch auf das div verzichten und stattdessen die dynamisch geladenen Teile direkt in das umgebende td einpflanzen.

    Aber letztendlich fragt man sich wieder einmal: Muss das Tabellengehampel denn sein? Willst du nicht lieber versuchen, von den Layouttabellen wegzukommen und stattdessen sinnvoll strukturiertes Markup schreiben?

    Ciao,
     Martin

    --
    Letztlich basiert alles auf dem Feuer, dem Rad, der Eins und der Null.
      (Gernot Back)
    1. Hi,

      Ja: Bau das div-Element gleich von Anfang an korrekt in ein td ein. Dann musst du innerhalb des div natürlich wieder eine vollständige Tabelle erzeugen. Und eigentlich kannst du dann auch auf das div verzichten und stattdessen die dynamisch geladenen Teile direkt in das umgebende td einpflanzen.

      Das hab ich schon probiert. Nur stimmen hier die Spaltenbreiten beider Tabellen nicht mehr überein. Die innere ist immer kleiner/gleich als die Äußere. Feste Spaltenbreiten will ich nicht angeben, da ich nicht weiß, was ich alles aus der DB anzeigen lasse.

      Ich teste gerade diese Version:
      <table>
       <thead>....</thead>
       <tbody>
        <tr>
         <td>aaa</td>
         <td>bbb</td>
        </tr>
       </tbody>
       <tbody id="weitere_zeilen" />
      </table>

      Scheint ganz gut zu klappen.

      Aber letztendlich fragt man sich wieder einmal: Muss das Tabellengehampel denn sein? Willst du nicht lieber versuchen, von den Layouttabellen wegzukommen und stattdessen sinnvoll strukturiertes Markup schreiben?

      Jep. Da es sich hierbei jedoch um die Ausgabe eines selects aus einer DB handelt, ist eine Tabelle schon angebracht. Es sind schließlich Daten in Tabellenstruktur.

      ciao,
        bex66