phomeXa: Unbekannte Anzahl an TR Zeilen verbergen

Ich will für eine Forensoftware eine unbestimmte Anzahl an TR Zeilen verbergen bzw. anzeigen lassen. Bisher sieht mein Script so aus:

if (document.getElementsByName('table_' + pre)[0].style.display == ''){
  for (var tr in document.getElementsByName('table_' + pre))
    tr.style.display = 'none';
  document.getElementsByName('img_' + pre)[0].src = 'plus.jpg';
}else{
  for (var tr in document.getElementsByName('table_' + pre))
    tr.style.display = '';
  document.getElementsByName('img_' + pre)[0].src = 'minus.jpg';
}

Es gibt also mehrere Zeilen, die jeweils "table_xxx" heißen. Leider funktioniert es nicht wirklich so wie es soll. Weder unter Firefox noch unter IE. Hat irgendwer eine Idee, wie's besser geht?

Gruß
phomeXa

  1. Es gibt also mehrere Zeilen, die jeweils "table_xxx" heißen. Leider funktioniert es nicht wirklich so wie es soll. Weder unter Firefox noch unter IE. Hat irgendwer eine Idee, wie's besser geht?

    TR hat kein Attribut name.

    Struppi.

    1. Es gibt also mehrere Zeilen, die jeweils "table_xxx" heißen. Leider funktioniert es nicht wirklich so wie es soll. Weder unter Firefox noch unter IE. Hat irgendwer eine Idee, wie's besser geht?

      TR hat kein Attribut name.

      Andere Ideen? Extra eine neue Tabelle aufmachen (die ich dann verstecken kann) wollte ich nicht.

      1. hi,

        TR hat kein Attribut name.

        Andere Ideen?

        klasse.

        http://de.selfhtml.org/html/attribute/allgemeine.htm#uebersicht
        http://de.selfhtml.org/javascript/objekte/all.htm#class_name

        gruß,
        wahsaga

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

    Ich will für eine Forensoftware eine unbestimmte Anzahl an TR Zeilen verbergen bzw. anzeigen lassen. Bisher sieht mein Script so aus:

    ggf. mehrere tbody-Elemente mit id verwenden (keines der tabelleninternen Elemente hat ein name-Attribut) und diese tbody-Elemente ein-/ausblenden.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hi,

      Ich will für eine Forensoftware eine unbestimmte Anzahl an TR Zeilen verbergen bzw. anzeigen lassen. Bisher sieht mein Script so aus:

      ggf. mehrere tbody-Elemente mit id verwenden (keines der tabelleninternen Elemente hat ein name-Attribut) und diese tbody-Elemente ein-/ausblenden.

      cu,
      Andreas

      Also ich hab die Dinger jetzt folgendermaßen definiert:

      <TBODY ID=table_25 STYLE="display:none;">
      ...
      </TBODY>

      Funktioniert auch wunderbar, wird nicht angezeigt. Das Script sieht folgendermaßen aus:

      function toggleVis(pre) {
        if (document.getElementByID('table_' + pre).style.display == ''){
          document.getElementByID('table_' + pre).style.display = 'none';
          ...
        }else{
          document.getElementByID('table_' + pre).style.display = '';
          ...
        }
      }

      Und wird über toggleVis(25); aufgerufen, aber es funktioniert nicht. Die IE Fehlermeldungen helfen leider nicht weiter und FF hab ich auf der Arbeit nicht. Sieht jemand den Fehler?

      1. Hallo phomeXa,

        if (document.getElementByID('table_' + pre).style.display == ''){

        mal abgesehen davon, dass du das 'd' von getElementById klein schreiben musst - lass dir mal ausgeben, welchen Wert style.display vor dieser Zeile hat.

        Grüße aus Nürnberg
        Tobias

        1. Hallo,

          if (document.getElementByID('table_' + pre).style.display == ''){
          mal abgesehen davon, dass du das 'd' von getElementById klein schreiben musst - lass dir mal ausgeben, welchen Wert style.display vor dieser Zeile hat.

          Natürlich »none«, wenn style="display:none" im Quelltext steht. Wenn kein style-Attribut im Quelltext steht, ist .style.display wie in der Abfrage vermutet ein leerer String. Worauf willst du hinaus?

          Mathias

          1. Hallo Mathias,

            if (document.getElementByID('table_' + pre).style.display == ''){
            mal abgesehen davon, dass du das 'd' von getElementById klein schreiben musst - lass dir mal ausgeben, welchen Wert style.display vor dieser Zeile hat.
            Natürlich »none«, wenn style="display:none" im Quelltext steht. Wenn kein style-Attribut im Quelltext steht, ist .style.display wie in der Abfrage vermutet ein leerer String. Worauf willst du hinaus?

            Sorry, mein Fehler - ich war fälschlicherweise davon ausgegangen, dass (sofern nirgends ein anderer Wert angegeben ist) .style.display den Default-Wert enthält (im Falle von tbody eben "table-row-group") - wenn das der Fall gewesen wäre, würde die Abfrage auf =='' natürlich schiefgehen.

            Grüße aus Nürnberg
            Tobias

      2. function toggleVis(pre) {
          if (document.getElementByID('table_' + pre).style.display == ''){
            document.getElementByID('table_' + pre).style.display = 'none';
            ...
          }else{
            document.getElementByID('table_' + pre).style.display = '';
            ...
          }
        }

        Wenn du davon ausgehst, dass im Quellcode immer style="display:none" steht, sind diese Abfragen nicht notwendig. Eine Abfrage ist aber nicht verkehrt.

        Das einzige Problem ist, dass der MSIE nicht mit display:table-row-group zurechtkommt, sondern display:block fordert. Dementsprechend braucht man eine MSIE-Abfrage, am besten fragt man über currentStyle ab, ob der display-Wert eines sichtbaren tbody-Elements auf »block« steht. Das ist die einzig zuverlässige und zukunftsfähige Abfragemöglichkeit.

        var tbody_block = false;
        function toggleVis (pre) {
         var tbody = document.getElementById("table_" + pre);
         if (tbody.style.display != "none") {
          if (tbody.currentStyle && tbody.currentStyle.display == "block")
           tbody_block = true;
          tbody.style.display = "none";
         } else {
          if (tbody_block)
           tbody.style.display = "block";
          else
           tbody.style.display = "table-row-group";
         }
        }

        Bei dem Beispiel muss die Funktion zuerst auf ein sichtbaren tbody angewendet werden, um ihn zu verstecken, ansonsten schlägt das Sichtbarmachen fehl. (Man kann natürlich auch beim Laden des Dokuments ein beliebigen sichtbaren tbody als Indikator benutzen, um tbody_block zu setzen.)

        Mathias

  3. Hi,

    Hat irgendwer eine Idee, wie's besser geht?

    Coding: Darstellungswechsel - Un-/Sichtbare Elemente: Ein-/Ausklappen, Verstecken, Transparenz, Farbe

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!