tableaux

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : tableaux

par HD » 15 août 2005, 07:00

ca marche tres bien merci !!

par naholyr » 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.

par albat » 13 août 2005, 22:37

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

par HD » 13 août 2005, 12:31

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

par naholyr » 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.

par naholyr » 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.

par HD » 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

par HD » 13 août 2005, 01:47

c'est surtout qu'il faut etre bon bricoleur pour faire cohabiter IE 6, IE 5, IE 4 et IE 3 !
mais bon merci pour le conseil

par naholyr » 13 août 2005, 01:19

Parce qu'IE est un navigateur obsolète dans sa version 6 (et il n'est pas encore particulièrement prometteur en version 7), et qu'il est donc agréable de surfer avec un *vrai* navigateur (à base de gecko, ou Opera d'une convivialité extraordinaire). Et surtout parce que si tu développes des sites, il peut être intéressant de savoir comment "les autres" voient ton site :)

Sur mon poste j'ai ainsi Firefox, IE 6, IE 5, IE 4, IE 3, Opera 7, Opera 8, Deepnet (je sais pas d'où je le sors celui-là), et même lynx :lol: Sans sombrer dans un tel extrémisme voir son site sous firefox + IE est un minimum (IE = 80% des visiteurs, Firefox = 15 à 20%, et la tendance continue à s'inverser)

par HD » 13 août 2005, 00:50

et je crois savoir que c'est assez facile
pourquoi firefox, ie + crazybrowser font bien l'affaire chez moi ?!

par naholyr » 12 août 2005, 23:28

Tu devrais installer Firefox pour le plaisir ;) (c'en est un, de plaisir).
Et te mettre aux CSS, c'est vraiment exaltant.

par HD » 12 août 2005, 22:15

Ni CSS, ni JavaScript, ni Firefox... tu développes pour gagner ta vie :?: :-k
non juste pour le plaisir :!: :ordi: :pouce:

par mere-teresa » 12 août 2005, 13:32

Yo je l'ai fait l'effet rollover et clic et tout :) c'est hyper fun

par Cyrano » 12 août 2005, 13:21

Ni CSS, ni JavaScript, ni Firefox... tu développes pour gagner ta vie :?: :-k

par HD » 12 août 2005, 12:54

j'ai pas firefox mais je vasi essayer avec ie... c'est pas gagné car le javascript j'y ai jamais prété grande attention :?