jQuery: trasformare una lista in una tabella

jQuery: trasformare una lista in una tabella

Con jQuery possiamo trasformare una lista in una tabella con relativa semplicità. A volte infatti le tabelle sono più pratiche da usare delle liste, soprattutto quando dobbiamo gestire elementi a dimensione variabile (come le immagini). Tuttavia le liste sono senz'altro più indicate per quello che riguarda l'indicizzazione e l'accessibilità di una pagina. Per questo motivo possiamo usare una lista nella marcatura ma visualizzarla come una tabella tramite jQuery e il DOM. Vediamo come.

Abbiamo la seguente marcatura:


<ul id="gallery">

<li><img src="img/1.jpg" alt="Immagine" />
<p>Didascalia</p></li>

<li><img src="img/2.png" alt="Immagine" />
<p>Didascalia</p></li>

<li><img src="img/3.jpg" alt="Immagine" />
<p>Didascalia</p></li>

</ul>

La lista diverrà un elemento table, le voci di lista verranno trasformate in elementi tr e il contenuto di ciascuna voce verrà inserito in elementi td. Per questo motivo il nostro CSS dovrà dare degli stili come se l'elemento fosse già una tabella:


body {

  margin: 0 auto;
  width: 620px;
  padding: 2em 0;
  font: small Arial, sans-serif;
  background: #fff;
  color: #555;

}

#gallery {

    width: 456px;
    margin: 0 auto;
    border-collapse: collapse;
    table-layout: fixed;

}

#gallery td {

    width: 147px;
    padding-right: 5px;

}

#gallery td img {

    display: block;
    width: 100%;

}

#gallery td p {

    margin: 0;
    padding: 0.3em 0;
    text-align: center;
    text-transform: uppercase;

}

Con jQuery non dobbiamo far altro che assemblare il nostro nuovo contenuto sotto forma di una stringa HTML che poi andremo a sostituire al contenuto della nostra lista tramite il metodo replaceWith():


$(function(){

    var html = '';
    html += '<table id="gallery">';
    html += '<tr>';
    
    $('li', '#gallery').each(function() {
    
        var $li = $(this);
        var imgSrc = $li.find('img').attr('src');
        var imgAlt = $li.find('img').attr('alt');
        var caption = $li.find('p').text();
        
        html += '<td><img src="'+imgSrc+ '" alt="'+imgAlt+ '"/>'+'<p>'+caption+'</p></td>';
    
    });
    html += '</tr>';
    html += '</table>';
    
    $('#gallery').replaceWith(html);
    

});

In pratica non abbiamo fatto altro che ricreare il nuovo contenuto costruendo la nostra tabella un componente alla volta.

Potete visionare l'esempio finale in questa pagina.

Torna su