2011-12-23 6 views
5

Vorrei creare una tabella con dati scorrevoli. Devo bloccare la prima riga e la prima colonna del tavolo. La prima riga e la prima colonna della tabella devono ridimensionare automaticamente in larghezza e altezza le dimensioni delle celle variabili nell'area di contenuto della tabella (poiché l'utente aggiungerà nuove celle di tabella con una quantità variabile di contenuto).Tabella HTML scorrevole con intestazione fissa e colonna fissa

Qualcuno ha chiesto una questione connessa: How can I lock the first row and first column of a table when scrolling, possibly using JavaScript and CSS?

Ma il link al demo online e il codice sorgente è morto, quindi sono in grado di confermare la soluzione.

risposta

3

Ok, ho letto molte risposte sul web e infine ho assemblato una demo che funzionava. Sto usando PHP per creare 50 righe nella tabella, ma puoi altrettanto facilmente codificare i dati. Essenzialmente ho creato quattro quadranti (div.q1, div.q2, div.q3 e div.q4), dove il quarto quadrante contiene la tabella dei dati effettiva. Ho usato jquery per copiare la tabella nel quarto quadrante nel secondo e terzo quadrante prima di sincronizzare le barre di scorrimento. Ho usato una combinazione di eccedenza CSS, larghezza, altezza e proprietà di visualizzazione per nascondere elementi TD non necessari in ciascuno dei quadranti. Ecco un esempio di lavoro completo:

<html> 
<head> 
<style> 
body {width:350px;} 
.q1, .q2, .q3, .q4 {overflow:hidden; display:block; float:left;} 
.q1 {width:50px; height: 30px;} 
.q2 {width:300px; height: 30px;} 
.q3 {width:50px; height: 100px;} 
.q4 {width:300px; height: 100px; overflow:auto;} 

.q2 .firstCol, .q3 thead, .q4 thead, .q4 .firstCol {display:none;} 
.q2 td {background-color:#999;} 
.q3 td {background-color:#999;} 
.container {width:9999px;} 

</style> 

<script src="http://code.jquery.com/jquery-1.7.min.js"></script> 
<script> 
$(document).ready(function(){ 
    $('.q4').bind('scroll', fnscroll); 
    $('.q2').html($('.q4').html()); 
    $('.q3').html($('.q4').html()); 
}); 

function fnscroll(){ 

$('.q2').scrollLeft($('.q4').scrollLeft()); 
$('.q3').scrollTop($('.q4').scrollTop()); 


} 

</script> 
</head> 


<body> 
     <div class="q1"><div class="container"></div></div> 
     <div class="q2"><div class="container"></div></div> 
     <div class="q3"><div class="container"></div></div> 
     <div class="q4"> 
      <div class="container"> 
      <table> 
       <thead> 
        <tr> 
        <td class="firstCol"></td> 
        <td>Col</td> 
        <td>Col</td> 
        <td>Col</td> 
        <td>Col</td> 
        <td>Col</td> 
        <td>Col</td> 
        <td>Col</td> 
        <td>Col</td> 
        </tr> 
       </thead> 
       <tbody> 
       <?php for($c=0; $c<50; $c++) { ?> 
        <tr> 
        <td class="firstCol">Row</td> 
        <td>this is some content</td> 
        <td>hello world!<br/>This is good</td> 
        <td>Row</td> 
        <td>adjfljaf oj eoaifj </td> 
        <td>ajsdlfja oije</td> 
        <td>alsdfjaoj f</td> 
        <td>jadfioj</td> 
        <td>jalsdjf oai</td> 
        </tr> 
       <?php } ?> 
       </tbody> 
      </table> 
      </div> 
     </div> 
</body> 
</html> 
+0

questo è grande. appena aggiunto un violino per questo qui http://jsfiddle.net/9NcnH/ – dotnetcoder

+0

come possiamo regolare la larghezza per q3 in modo dinamico in base al contenuto invece di impostare questo a 50px? – dotnetcoder

1

il rendering della tabella due volte:

  • volta contenuto in un div scorrevole di dimensioni desiderate
  • Una volta in un piccolo div, div non scorrevole (overflow: hidden), che è posizionato sopra le righe dell'altro, nascondendo la riga superiore ma non la barra di scorrimento
4

Utilizzare l'eccellente jQuery Datables con l'estensione FixedHeader.

Scorri verso il basso oltre la riga dell'intestazione e vedrai che si incolla perfettamente sulla parte superiore dello schermo.

per l'intestazione, piè di pagina, a sinistra e l'eccitazione a destra:

http://datatables.net/release-datatables/extras/FixedHeader/top_bottom_left_right.html

+0

Wow! Stavo cercando queste cose ma non mi ero reso conto che era nella sezione "Extra" del sito Datatables.net! – 321X

+1

che il collegamento è rotto, è ora su https://www.datatables.net/extensions/fixedheader/ – samson