2 Stimmen

Ausblenden der gesamten Tabelle bei Größenänderung

Eine HTML-Seite mit einer einfachen Tabelle und JS-Code zum Ein- und Ausblenden der Tabelle:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>title</title>
    <script type="text/javascript">

    function showErrorSteps()
    {        
        var el = document.getElementById("t1");

        if(el.style.display=="none")
        {
            el.style.display="block";
        }
        else
        {
        el.style.display="none";
        }                                               
    }

    </script>
</head>
<body>

<br />
<span onclick="showErrorSteps()">[click]</span>
<br />
<br />

<table id="t1" border="1" width="100%" style="table-layout: fixed">
<tr>
    <td>s</td>
    <td>d</td>
    <td>a</td>
</tr>
</table>        
</body>
</html>

Was passiert, ist, dass auf Mozilla die Tabelle wird nach dem Klicken zweimal (auch mit der Tabelle-Layout: feste css) angepasst. IE funktioniert gut.

0 Stimmen

Gibt es DOCTYPE auf dieser Seite? Wenn nicht, warum xhtml-Namespace?

0 Stimmen

Table-layout: fixed ist eine Sache des IE, nicht des Standards

0 Stimmen

@RoBorg - ich bin sehr zufrieden mit den Nicht-Standard-Implementierungen des IE; ich benutze allerdings immer noch Mozilla :) @Anthony ... guter Punkt

6voto

cletus Punkte 596503

Tabellen sollten nicht auf display: block . Tabellenzeilen und Zellen sollten das auch nicht. Sie haben unterschiedliche Anzeigewerte. Mein Rat? Machen Sie es nicht auf diese Weise. Verwenden Sie eine Klasse:

.hidden {
  display: none;
}

und fügen Sie es dynamisch hinzu und entfernen Sie es aus der Tabelle, um Probleme bei der Einstellung des richtigen Anzeigetyps für ein Element zu vermeiden, das Sie anzeigen.

Editar: Um die Frage zu klären, warum man das so macht und was da los ist. Versuchen Sie dies:

<table>
<tr>
  <td>Cell 1</td>
  <td style="display: block;">Cell 2</td>
</tr>
</table

Es wird (oder sollte) Ihr Tabellenlayout durcheinander bringen. Warum, weil eine <td> Element hat standardmäßig display: table-cell no block . Die Tische sind gleich. Sie haben display: table .

Das Zurücksetzen von CSS-Attributen ist... problematisch.

Daher ist es am besten, Klassen zum Setzen und Aufheben von Attributen zu verwenden. Es ist einfacher zu ändern (die Klasse befindet sich in einer CSS-Datei und ist kein Code), vermeidet Probleme wie das Zurücksetzen des Wertes auf den korrekten ursprünglichen Wert und bietet im Allgemeinen eine sauberere Lösung, insbesondere bei Verwendung einer Bibliothek wie jQuery. In jQuery können Sie das tun:

$("table").toggleClass("hidden");

Erledigt.

Oder Sie können verwenden addClass() y removeClass() wenn das angemessener ist. Zum Beispiel:

<input type="button" id="hide" value="Hide Table">
...
<table id="mytable">
...

und

$(function() {
  $("#hide").click(function() {
    if ($("#mytable").is(".hidden")) {
      $("#hide").val("Hide Table");
      $("#mytable").removeClass("hidden");
    } else {
      $("#hide").val("Show Table");
      $("#mytable").addClass("hidden");
    }
  });
});

Und schon haben Sie eine robuste, prägnante und leicht verständliche Lösung (sobald Sie sich mit der jQuery-Syntax vertraut gemacht haben, was nicht allzu lange dauert).

Direkt mit Javascript herumzuspielen ist so 2002 :-)

0 Stimmen

Das funktioniert, obwohl ich zugeben muss, dass ich nicht verstehe, warum es funktioniert.

0 Stimmen

@cletus: Was ist der Standardwert für die Anzeige für eine Tabelle, seine nicht Block.

0 Stimmen

Einfach. Wenn die Klasse vorhanden ist, wird sie ohne angezeigt, wenn sie nicht vorhanden ist, wird sie wie in der Standardeinstellung des Elements angezeigt. Es gibt keine Persistenz. Ich sage den Leuten immer wieder, dass Klassenmanipulation besser ist als Stilmanipulation, aber werden sie zuhören?)

1voto

Andy McCluggage Punkte 35822

Dies ist keine direkte Antwort auf Ihre Frage, sondern eine ernsthafte Empfehlung. Ich habe vor kurzem die Vorzüge von JQuery . All diese Dinge können mühelos erledigt werden, und es gibt umfangreiche Online-Beispiele und Referenzen.

Wenn Sie keine Zeit haben, sich damit zu beschäftigen, dann bin ich sicher, dass jemand hier eine Lösung anbieten wird, aber ich würde jedem, der etwas anderes als die oberflächlichste JavaScript-DOM-Manipulation macht, empfehlen, JQuery (oder ein ähnliches Framework) in Betracht zu ziehen.

JQuery bietet browserunabhängige Hide(), Show() und Toggle() Methoden. Hier ist eine meiner Lieblingsmethoden Referenzen .

0 Stimmen

Danke, ich werde es mir ansehen. Ich arbeite eigentlich an einem .net win forms Projekt, so dass ich nicht wirklich mit html interagieren, außer wenn ich einige ausgefallene Berichterstattung tun wollen.

0voto

Lennart Koopmann Punkte 18919

Das könnte daran liegen, dass Sie style.display auf "block" gesetzt haben. Versuchen Sie, ihn auf "" zu setzen. Sie sollten auch die Tabellenbreite mit CSS festlegen. (Breite: 100%;)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X