2010-04-21 18 views
7

ile tavsiye ben edilmesini istediğiniz Need: Tablo (N değişebilir) ilk N sütunları üzerinde yayılacak mesajlarını içerecekböyle mesajlarla bir HTML tablosu kodlamak için HTML tablosunun

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

. Bu N sütunu, mesaj alanını çağırır. Her bir mesaj, mesaj alanındaki X bitişik hücreler üzerinde bulunur. X de değişebilir.

Her mesajın alt çizgi ile ayrılmış sözcükleri içeren bir adı vardır. Javascript/jQuery bu tabloyu kodlamak öneriyoruz nasıl

öyle ki:

  • O (hücreyi, son hücresini, renk, adı başlatmak)
  • adı belirten bir açıklama yaparak tanımlamak kolay olurdu Sadece alt çizgilerden sonra kırın (kelimenin tam ortasında değil)

cevap

5

Hücreleri doğrusal olarak sıralayın, satır/sütuna dönüştürün, aralıktaki her hücrenin arka planını ve kenarlıklarını ayarlayın ... çok zor değil.

Zor bir bit, hücrenin içeriğinin hücre tarafından taşmasıyla, IE'nin tablo taşmalarının bitlere bağlanmasıyla metnin üst tarafına eklenmesidir.

Çalıştığım gibi görünen şey, IE7 için hackler içeriyor, ancak IE6'da test etmedim, bu yüzden ne olacağını bilen var.

<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

Kod için çok teşekkürler! İleti alanını 6 sütuna değiştirmeyi denedim, ancak ileti metninin hala 3. sütunda kırıldığı görülüyor. Bunun böyle olması mı gerekiyor? –

+0

Oh! Evet. Stil sayfasında '% 300' idi. Tutarlılık için bu genişliğin JavaScript'ten yazılması için güncellendi. – bobince

+0

'message.style.width = this.width + '00%'; 'IE8 –