koerschgen2001: Tabelle, aber mit display Eigenschaft

Hallo zusammen,

ich habe ein kleines Nachrichtensystem gebaut. Also zum empfangen und senden von privaten Nachrichten.
Das ganze wird dann tabellarisch ausgegeben. Das sieht dann in etwa so aus.

<table border="0" cellspacing="2" cellpadding="5" class="postfach">
  <tr>
      <th bgcolor="lightblue">Absender</th>
      <th bgcolor="lightblue">Betreff</th>
      <th bgcolor="lightblue">Uhrzeit</th>
      <th bgcolor="lightblue"><p><a href="javascript:show_all()">Alle Anzeigen!</a>&nbsp;|&nbsp;<a href="javascript:hide_all()">Alle Verstecken!</a></th>
  </tr>
   <tr>
      <td colspan="4" style="border: none; height: 10px">&nbsp;</td>
  </tr>
  <tr>
      <td colspan="4" style="border: none; height: 2px">&nbsp;</td>
  </tr>
   <tr bgcolor="yellow">
      <td>koerschgen2001</td>
      <td>Frage</td>
      <td>17:20</td>
      <td><a href="javascript:change_anaus('ID1', id11);" name="id11">Anzeigen</a>&nbsp;&nbsp;&nbsp;<a href="index.php?inhalt=antworten&ms=1">Antworten</a><input type="checkbox" name="delete[]" value="1"></td>
  </tr>
  <tr style="display:block">
        <td colspan="4" bgcolor="lightyellow">Ich habe eine Frage?</td>
  </tr>
</table>

Die Funktionen "show_all", "hide_all", "anaus" blenden jeweils die entsprechende Nachricht ein oder aus(oder alle bei show_all, hide_all).
Die Funktionen setzen die Eigenschaft display jeweils auf none oder block. Damit wird nur die Nachricht selber aus/eingeblendet, aber die die Der Nachrichtenkopf(Absender, Betreff...).
So kann man immer die Nachricht öffnen die man lesen möchte und das hält das Postfach übersichtlich.

Die Eigenschaft display für Tabellen Elemente geht natürlich nicht.
Ich habe auch schon versucht ein div-Element in die entsprechende Zelle zu packen. Klappt auch nicht.

Mit den speziellen Eigenschaften wie table, table-row.. könnte ich eine Tablle mit div-Elementen erstellen. Problem gelöst..?
Aber der IE interpretiert das nicht.

Wie kann man das so umgestalten, dass es die tabellarische Ansicht behält, aber die display Eigenschaft genutzt werden kann?

  1. hi,

    Die Eigenschaft display für Tabellen Elemente geht natürlich nicht.

    Natürlich "geht" die.
    Was also meinst du damit?

    Die Funktionen setzen die Eigenschaft display jeweils auf none oder block.

    Zum wieder Einblenden einer Tabelle kannst du im Firefox allerdings nicht "block" nehmen - der möchte "table" haben.

    Einfachste Lösung: Nur einen Leerstring zuweisen, damit der Browser den ihm genehmen Default nehmen kann.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. hi,

      wie das im Beispiel zu sehen ist hatte ich das nähmlich.
      Firefox wollte das aber nicht so richtig.
      Ich dachte der hätte Probleme mit der Tabelle und display.

      Wenn ich jetzt wie du sagst da einen Leerstring einfüge, dann ist meine css nicht mehr valide, oder?

      1. hi,

        wie das im Beispiel zu sehen ist hatte ich das nähmlich.
        Firefox wollte das aber nicht so richtig.
        Ich dachte der hätte Probleme mit der Tabelle und display.

        In deinem Beispiel sehe ich display nur an einer einzigen Stelle auftauchen, und zwar für display.

        Falls wir dich missverstanden (besser: falsch geraten) haben sollten - dann beschreibe erst mal dein Problem genauer (und nachvollziehbarer als so unsinnig wie "display geht für Tabellen nicht").

        Wenn ich jetzt wie du sagst da einen Leerstring einfüge, dann ist meine css nicht mehr valide, oder?

        Jan und ich redeten vom Manipulieren von Style-Eigenschaften per javascript.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. hi,

          hast mit dem validen css recht.

          da steht nur einmal display weil ich als beispiel nur eine geschrieben habe.

          Im normal Fall werden die aus einer Datenbank erzeugt und dann sind das mehrere dei Anhand der ID gekennzeichnet sind.

          Hab das mal mti dem Leerstring ausprobiert.

          Die Funktionen show_all und hide_all funktionieren damit.
          Aber die Funktion anaus() für die einzelnen Nachrichten nicht mehr.

          function change_anaus(id,name)
          {
          myElementStyle = document.getElementById(id).style;
           if(myElementStyle.display=="none")
           {
           name.innerHTML = "Verstecken";
           myElementStyle.display = "";
           }
           else
           {
           name.innerHTML = "Anzeigen";
           myElementStyle.display = "none";
           }
          }

          1. Hallo,

            hab das Problem gelöst. Es lag an der Funktion.
            Hier die funktionierende Version:

            function change_anaus(id,name)
            {
            myElementStyle = document.getElementById(id).style;
             if(myElementStyle.display=="none")
             {
             document.getElementsByName(name)[0].innerHTML = "Verstecken";
             myElementStyle.display = "";
             }
             else
             {
             document.getElementsByName(name)[0].innerHTML = "Anzeigen";
             myElementStyle.display = "none";
             }
            }

  2. Hallo,

    Die Eigenschaft display für Tabellen Elemente geht natürlich nicht.

    Doch, das geht. Jedes Element hat eine display-Eigenschaft.

    Mit den speziellen Eigenschaften wie table, table-row.. könnte ich eine Tablle mit div-Elementen erstellen. Problem gelöst..?
    Aber der IE interpretiert das nicht.

    Einer Tabellenzeile zum Ausblenden 'display: none' zuzuweisen und zum
    Einblenden display dann wieder auf den Standardwert 'table-row' zu setzen, ist
    richtig. Da brauchst du kein <div> zu.

    Es ist wohl richtig, daß der IE Probleme mit 'display: table-row' hat. Es
    funktioniert m.W. aber, wenn du einfach

      
    element.style.display = '';  
    
    

    benutzt. Dann wird der Standard-Wert für 'display' verwendet.

    Gruß, Jan