Je voudrai créer un tableau dynamique en javascript avec un bouton qui insère des lignes et un autre dans chaque ligne créee qui supprime une ligne.
J\'ai ce code là :
// Tableau
/*
* Utilisation :
* 1. Créer un tableau avec la proprieté class=\"dTable\" (Dynamic TABLE)
* 2. Le tableau doit être standard : il contenir un <thead>, un <tbody> et un <tfoot>
* et utiliser à bon escient les <td> et <th>.
* 3. La première ligne du tbody sera utilisée comme ligne de réference.
* Elle sera clonée pour en ajouter de nouvelle. Elle ne sera pas affichée.
*/
window.onload = dtableInit;
/* initialise le script */
function dtableInit() {
var table = document.getElementsByTagName(\'TABLE\');
for ( var i = 0; i < table.length; i++ ) {
// on récupère tous les tableaux dynamiques
if ( table[i].className = \'dTable\' ) {
var tbody = table[i].tBodies[0];
var newTr = tbody.rows[0].cloneNode(true);
// on masque la première ligne du tbody (la ligne de reference)
tbody.rows[0].style.display = \'none\';
// on en ajoute une
tbody.appendChild(newTr);
}
}
}
/* trouve le tag \"parentTagName\" parent de \"element\" */
function getParent(element, parentTagName) {
if ( ! element )
return null;
else if ( element.nodeType == 1 && element.tagName.toLowerCase() == parentTagName.toLowerCase() )
return element;
else
return getParent(element.parentNode, parentTagName);
}
/* ajoute une ligne */
function addLigne(link) {
// 1. récuperer le node \"TABLE\" à manipuler
var td = link.parentNode;
var table = getParent(td,\'TABLE\');
// 2. on va manipuler le TBODY
var tbody = table.tBodies[0];
// 3. on clone la ligne de reference
var newTr = tbody.rows[0].cloneNode(true);
tbody.appendChild(newTr);
if ( document.all ) // pour IE
newTr.style.display = \"block\";
else
newTr.style.display = \"table-row\"; // pour Gecko
}
/* supprimer une ligne */
function delLigne(link) {
// 1. récuperer le node \"TABLE\" à manipuler
var td = link.parentNode;
var table = getParent(td, \'TABLE\');
// 2. récuperer le TBODY
var tbody = table.tBodies[0];
// 3. Supprimer le TR
tbody.removeChild(getParent(td, \'TR\'));
}
ce code marche bien, si je le teste tout seul , par contre quand je l\'intègre dans une autre page avec mise en forme et en changeant quelques petits details il marche pas, explication : quand j\'ajoute des ligne tout va bien, idem quand je supprime une ligne ! MAIS il est sensé, quand je supprime meme la première ligne, d\'en rajouter une quand je clique sur \"ajouter une ligne\", ce qui est le cas quand je le teste tel que présenté par ce code mais quand il est integré dans une autre page il marche plus, il me crée plus la première ligne quand les lignes sont toutes supprimées pourtant la ligne 0 est protégée.
Quelqu\'un pourrait me dire comment faire pour empecher la suppression de la première ligne du tableau comme ça j\'aurais plus ce problème ? en d\'autre termes je peux supprimer n\'importe quelle ligne sauf la première.
tu me diras que je ne résoud pas ton souci, mais
pourquoi ne pas utiliser insertRows, deleteRows... ?
tableau.rows.length
nombre de lignes
tableau.rows[n° ligne].cells.Length
nombre de colonnes dans la ligne
tableau.insertRow(n° ligne)
ajouter une ligne
tableau.rows[n° ligne].insertCell(n° colonne)
ajouter une colonne dans la ligne
tableau.deleteRow(n° ligne)
détruire une ligne
tableau.rows[n° ligne].deleteCell(n° colonne)
détruire une colonne dans la ligne
tableau.rows[n° ligne].cell[n° colonne].???
accès à une cellule
par exemple : tableau.rows[0].cell[0].style.display
tableau.rows[0].cell[0].style.innerHTML ...
tableau.rows[n° ligne].on???"=function(){fonction(paramètres);};
ajouter une fonction à une ligne
par exemple :
tableau.rows[0].onclick=function(){Appel(this);};
tableau.rows[n° ligne].cell[n° colonne].on???"=function()
{fonction(paramètres);};
ajouter une fonction à une colonne
par exemple : tableau.rows[0].cell[0].onclick=function()
{Appel(this);};
ça me semble beaucoup plus simple, c'est compatible...
j'ai besoin de transcrire les options des 4 premiers select (à chaque selection) dans textfield et la longueur du texte du tetfield2 dans textfield3.
mon probleme est que à l'insertion d'une nvelle ligne je voudrai les memes elements et les meme actions mais relatives à la deuxieme ligne (je crois qu'il faut incrementer les "id" !!