tableaux

HD
Mammouth du PHP | 1181 Messages

13 août 2005, 02:16

question :
j'ai choisi finalement ca :
<div>

<table border="1" cellpadding="2" cellspacing="1" bordercolor="#33CCFF" bordercolorlight="#33CCFF" bordercolordark="#000080" bgcolor="#FFFFFF">

  <tr>
    <td valign="middle" align="center" onMouseover="this.bgColor='#33FFCC'" onMouseout="this.bgColor='#FFFFFF'"><font color="#FF0000"><strong>Dates d'achats</strong></font></td>
    <td valign="middle" align="center" onMouseover="this.bgColor='#33FFCC'" onMouseout="this.bgColor='#FFFFFF'"><font color="#FF0000"><strong>Noms</strong></font></td>

(...)
  </tr>

  <tr align="center" onMouseover="this.bgColor='#CCFFFF'" onMouseout="this.bgColor='#FFFFFF'">
    <td align="center">Objet</td>
    <td align="center">Objet</td>
    <td align="center">Objet</td>
(...)
  </tr>
  
</table>

</div>
quand le curseur passe sur une cellule avec marqué "objet" toute la ligne est "colorée"
par contre s'il passe sur une des cellules de la premiere ligne du tableau (titres des colonnes) seule la cellule en question est "colorée"
ce que je veux c'est que dans ce dernier cas, toute la COLONNE en question soit "colorée"
merci

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

13 août 2005, 10:57

Pour les différentes versions d'IE c'est ici que ça se passe ou là pour la version originale.

Pour ton problème de colonne, je pense que le plus simple c'est de passer par DOM.

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

13 août 2005, 12:09

Voici un exemple avec DOM

Edit: problème sur le onmouseout sur une colonne avec IE, j'ai la flemme de paufiner pour l'instant
Edit²: problème corrigé (définir le background à null pour lui faire un reset ne fonctionne pas toujours avec IE)

Code : Tout sélectionner

<html> <head> <style type="text/css"> table.colorize { background: #eee; border: 1px solid #e0e0e0; } table.colorize th { font-weight: bold; dont-style: italic; } table.colorize td { width: 100px; padding: 10px; border-bottom: 1px solid #999; border-right: 1px solid #bbb; } </style> <script type="text/javascript"> var defaultBackground = "none"; // Standardisation de l'évènement : la propriété target et la méthode preventDefault function stdEvent(e) { if (!e && window.event) e = window.event ; if (!e.target && e.srcElement) e.target = e.srcElement; if (!e.preventDefault) e.preventDefault = function () { this.returnValue = false ; }; return e ; } // ajoute un évènement function addEvent(source, type, callback) { if (source.addEventListener) { // code standard DOM source.addEventListener(type, callback, false); return true; } else if (source.attachEvent) { // code propriétaire MSIE var r = source.attachEvent("on"+type, callback); return r; } else { // code navigateur sans support DOM-event eval('source.on' + type + '= callback') ; } } // définit les évènements pour cette page function definirEvenements(e) { // on récupère les tables de la page var tables = document.getElementsByTagName('table'); for (var i=0; i<tables.length; i++) { var table = tables.item(i); // chaque table de la classe "colorize" est dynamisée if ((' '+table.className+' ').indexOf(' colorize ')!=-1) { definirEvenementsTable(table); } } } // définit les onMouseOver, onMouseOut, onClick des lignes & cellules function definirEvenementsTable(table) { var i; // définir la coloration par colonne pour la première ligne if (table.rows.length>0) { var firstRow = table.rows[0]; // premiere ligne de la table for (i=0; i<firstRow.cells.length; i++) { // pour chaque cellule de cette ligne addEvent(firstRow.cells[i], "mouseover", colorizeCol); // on attache l'évènement onMouseOver à la fonction colorizeCol addEvent(firstRow.cells[i], "mouseout", colorizeCol); // on attache l'évènement onMouseOut à la fonction colorizeCol } } // définir la coloration par ligne pour les suivantes for (i=1; i<table.rows.length; i++) { // pour chaque ligne de la table, en sautant la première addEvent(table.rows[i], "mouseover", colorizeRow); // on attache l'évènement onMouseOver à la fonction colorizeRow addEvent(table.rows[i], "mouseout", colorizeRow); // on attache l'évènement onMouseOut à la fonction colorizeRow } } // coloriser une colonne function colorizeCol(e) { e = stdEvent(e); // on standardise l'évènement pour avoir l'attribut target (cible de l'évènement) var row = e.target.parentNode; // le tag "parent" de la cellule survolée : la ligne // on cherche le numéro de colonne de la cellule survolée var cellNum = -1; var i; for (i=0; i<row.cells.length; i++) { // pour chaque cellule sur la même ligne if (row.cells[i]==e.target) { // si la cellule est celle survolée cellNum = i; // on a son numéro break; } } // le tag "parent" de la ligne : la table var rows = row.parentNode.rows; // les lignes de la table var cell; for (i=0; i<rows.length; i++) { // pour chaque ligne cell = rows[i].cells[cellNum]; // la cellule sur la même colonne que la cellule survolée if (e.type=="mouseover") // si c'est un évènement mouseover cell.style.background = "red"; // on définit le fond else if (e.type=="mouseout") // sinon c'est un évènement mouseout cell.style.background = defaultBackground; // on remet le fond par défaut } } // coloriser une ligne function colorizeRow(e) { e = stdEvent(e); // on standardise l'évènement pour avoir l'attribut target (cible de l'évènement) var cells = e.target.parentNode.cells; // le tag "parent" de la cellule survolée : la ligne var cell; for (var i=0; i<cells.length; i++) { // pour chaque cellule de la ligne cell = cells[i]; if (e.type=="mouseover") // si c'est un évènement mouseover cell.style.background = "red"; // on définit le fond de la ligne else if (e.type=="mouseout") // sinon c'est un évènement mouseout cell.style.background = defaultBackground; // on remet le fond par défaut } } // attacher les évènements à la fenêtre if (document.getElementById) { addEvent(window, "load", definirEvenements); } </script> <title>Tableau</title> </head> <body> <!-- on écrit notre table normalement, en lui donnant la classe "colorize" --> <table class="colorize"> <tr><th>Titre1</th><th>Titre2</th><th>Titre3</th></tr> <tr><td>Cell1.1</td><td>Cell1.2</td><td>Cell1.3</td></tr> <tr><td>Cell2.1</td><td>Cell2.2</td><td>Cell2.3</td></tr> <tr><td>Cell3.1</td><td>Cell3.2</td><td>Cell3.3</td></tr> <tr><td>Cell4.1</td><td>Cell4.2</td><td>Cell4.3</td></tr> <tr><td>Cell5.1</td><td>Cell5.2</td><td>Cell5.3</td></tr> </table> </body> </html>
Tu remarqueras du même coup que grâce à DOM on ne touche pas à la table, on lui donne simplement une classe pour indiquer qu'on veut lui appliquer les évènements, et avec Javascript on parcourt les tag "table", et on applique les comportements "onmouseover" et "onmouseout" sur les éléments par parcours ;) sans avoir besoin de défigurer notre code HTML avec de onmousemachin dans tous les coins.

L'intérêt c'est qu'une fois que tu as compris ce code, tu t'en fais une librairie et par la suite quand tu voudras "coloriser" une table, tu as simplement à inclure cette librairie, et à ajouter la classe "colorize" aux tables que tu veux coloriser => maintenabilité maximale.
Modifié en dernier par naholyr le 13 août 2005, 23:34, modifié 2 fois.

HD
Mammouth du PHP | 1181 Messages

13 août 2005, 12:31

merci bcp :!:
je teste ca et puis je repond

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

13 août 2005, 22:37

IE 4 et IE 3 !
Ou fétichiste nostalgique ! :shock:

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

13 août 2005, 23:25

IE 4 et IE 3 !
Ou fétichiste nostalgique ! :shock:
En plus pour être honnête je ne les utilise jamais, c'est même à peine si je vérifie sous IE6... Niveau JS j'ai assez de librairies "cross-browser" pour ne plus m'en préoccuper, et niveau CSS je me contente de peaufiner à la fin.

HD
Mammouth du PHP | 1181 Messages

15 août 2005, 07:00

ca marche tres bien merci !!