2010-04-21 9 views
7

Vorrei codificare una tabella HTML con messaggi come questo:bisogno di un consiglio con la tabella HTML

alt text http://img717.yfrog.com/img717/4348/tableo.png

La tabella contiene i messaggi che si sviluppa su prime colonne N (N potrebbe cambiare). Consente di chiamare queste colonne N, l'area messaggi. Ogni messaggio si trova su X celle contigue nell'area messaggi. X può anche cambiare.

Ogni messaggio ha un nome che contiene parole separate con caratteri di sottolineatura.

Come si consiglia di codificare questa tabella in JavaScript/jQuery in modo tale che:

  • Sarebbe facile definire un messaggio (inizio delle cellule, cellule fine, colore, nome)
  • Il nome sarà interrompi solo dopo underscore (piuttosto che nel mezzo della parola)

risposta

5

Numero di celle linearmente, convertire in riga/colonna, impostare lo sfondo ei bordi di ogni cella nel raggio ... non troppo difficile.

Il bit difficile è inserire il testo in alto facendo in modo che l'overflow del contenuto di una cella provenga dalla cella, dato che l'overflow della tabella di IE è gestito da bit.

Ecco quello che ho che sembra funzionare ... contiene hack per IE7, ma non l'ho provato su IE6 quindi chissà cosa succederà.

<style type="text/css"> 
    #t { table-layout: fixed; width: 50%; border-collapse: collapse; } 
    #t td { border: solid black 1px; height: 1.2em; overflow: visible; } 
    #t .message { text-align: center; } 

    /* these styles fix ie bugs */ 
    #t .message { position: relative; } 
    #t .message div { position: absolute; top: 0; left: 0; width: 100%; } 
</style> 

<table id="t"> 
    <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> 
    <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> 
    <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> 
    <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> 
    <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> 
    <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> 
    <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> 
    <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> 
    <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> 
    <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> 
    <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> 
    <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> 
</table> 

<script type="text/javascript"> 
    var t= new MessageTable(document.getElementById('t'), 3); 
    t.addMessage('SHORT_MESSAGE', 4, 16, 'yellow'); 
    t.addMessage('VERY_VERY_LONG_MESSAGE', 20, 14, 'cyan'); 

    function MessageTable(element, width) { 
     return {addMessage: function(text, c, n, color) { 
      // add zero-width spaces for breaking 
      text= text.replace(/_/g, '_\u200B'); 

      // set background and borders 
      for (var i= c; i<c+n; i++) { 
       var x= i%width, y= Math.floor(i/width); 
       var style= element.rows[y].cells[x].style; 
       style.backgroundColor= color; 
       style.borderLeftStyle= (i===c || x===0)? 'solid' : 'none'; 
       style.borderRightStyle= (i===c+n-1 || x===width-1)? 'solid' : 'none'; 
       style.borderTopStyle= i-c<width? 'solid' : 'none'; 
       style.borderBottomStyle= c+n-i<width? 'solid' : 'none'; 
      } 

      // add message to overflowing cell in first full row 
      // The do-nothing inner div is required for IE (again. bah) 
      var message= document.createElement('div'); 
      var inner= document.createElement('div'); 
      message.className= 'message'; 
      message.style.width= width+'00%'; 
      message.appendChild(inner); 
      inner.appendChild(document.createTextNode(text)); 
      element.rows[Math.ceil(c/width)].cells[0].appendChild(message); 
     }}; 
    } 
</script> 
+0

Grazie mille per il codice! Ho provato a cambiare l'area del messaggio in 6 colonne, ma sembra che il testo del messaggio si interrompa ancora nella 3a colonna. Dovrebbe essere così? –

+0

Oh! Si. Era il '300%' nel foglio di stile. Aggiornato per scrivere quella larghezza dal JavaScript per coerenza. – bobince

+0

Viene visualizzato un errore "Argomento non valido" su 'message.style.width = this.width + '00% ';' in IE8 –

Problemi correlati