FAQ JavaScriptConsultez toutes les FAQ
Nombre d'auteurs : 43, nombre de questions : 176, dernière mise à jour : 19 décembre 2013
Pour insérer une cellule dans un tableau (ou table), on peut considérer trois cas de figure :
- insertion de cellules "simples" ;
- fusion horizontale de cellules ;
- fusion verticale de cellules.
Dans ces trois cas, on utilise des fonctions du DOM : insertRow() et insertCell(). L'utilisation de la propriété innerHTML est déconseillée dans ce cas.
Imaginons cette table :
<
table
id=
"
idTable
"
>
<
tr>
<
td>
Ligne 0 Cellule 0
<
/
td>
<
td>
Ligne 0 Cellule 1
<
/
td>
<
td>
Ligne 0 Cellule 2
<
/
td>
<
td>
Ligne 0 Cellule 3
<
/
td>
<
/
tr>
<
/
table>
Insertion de cellules "simples"
Nous allons expliquer cette insertion de cellules en construisant une nouvelle ligne pas à pas.
function
insererCellules
(){
var
cell,
ligne;
//
on
récupère
l'identifiant
(id)
de
la
table
qui
sera
modifiée
var
tableau =
document.
getElementById
("
idTable
"
);
//
nombre
de
lignes
dans
la
table
(avant
ajout
de
la
ligne)
var
nbLignes =
tableau.
rows.
length;
ligne =
tableau.
insertRow
(-
1
);
//
création
d'une
ligne
pour
ajout
en
fin
de
table
//
le
paramètre
est
dans
ce
cas
(-1)
//
création
et
insertion
des
cellules
dans
la
nouvelle
ligne
créée
cell =
ligne.
insertCell
(0
);
//
création
et
insertion
de
la
cellule
0
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
0
"
;
//
ajout
du
texte
dans
la
cellule
0
cell =
ligne.
insertCell
(1
);
//
création
insertion
de
la
cellule
1
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
1
"
;
//
ajout
du
texte
dans
la
cellule
1
cell =
ligne.
insertCell
(2
);
//
création
insertion
de
la
cellule
2
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
2
"
;
//
ajout
du
texte
dans
la
cellule
2
cell =
ligne.
insertCell
(3
);
//
création
insertion
de
la
cellule
3
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
3
"
;
//
ajout
du
texte
dans
la
cellule
3
}
Fusion horizontale de cellules
Cette fusion permet d'obtenir une cellule plus large que les autres.
function
insererLigne_2CellulesHorizontalesFusionnees
(){
var
cell,
ligne;
//
on
récupère
l'identifiant
(id)
de
la
table
qui
sera
modifiée
var
tableau =
document.
getElementById
("
idTable
"
);
//
nombre
de
lignes
dans
la
table
(avant
ajout
de
la
ligne)
var
nbLignes =
tableau.
rows.
length;
ligne =
tableau.
insertRow
(-
1
);
//
création
d'une
ligne
pour
ajout
en
fin
de
table
//
le
paramètre
est
dans
ce
cas
(-1)
//
création
et
insertion
des
cellules
dans
la
nouvelle
ligne
créée
cell =
ligne.
insertCell
(0
);
//
création
et
insertion
de
la
cellule
0
dans
la
colonne
0
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
0
"
;
//
ajout
du
texte
dans
la
cellule
0
cell =
ligne.
insertCell
(1
);
//
création
et
insertion
de
la
cellule
1
cell.
colSpan =
2
;
//
colSpan=2
:
cette
cellule
prendra
2
colonnes
en
largeur
//
fusion
des
colonnes
1
et
2
car
la
cellule
0
est
déjà
présente
//
dans
la
nouvelle
ligne
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
1
"
;
//
ajout
du
texte
dans
la
cellule
1
cell =
ligne.
insertCell
(2
);
//
/!\
création
et
insertion
de
la
cellule
2
dans
la
colonne
3
//
car
la
cellule
d'index
1
fait
2
colonnes
de
large
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
2
"
;
//
ajout
du
texte
dans
la
cellule
2
}
Nous ne créons effectivement que trois cellules au lieu de quatre car une des cellules a la largeur de deux cellules.
Fusion verticale de cellules
Cette fusion permet d'obtenir une cellule plus haute que les autres.
function
insererLigne_2CellulesVerticalesFusionnees
(){
var
cell,
ligne1,
ligne2;
//
on
récupère
l'identifiant
(id)
de
la
table
qui
sera
modifiée
var
tableau =
document.
getElementById
("
idTable
"
);
//
nombre
de
lignes
dans
la
table
(avant
ajout
des
lignes)
var
nbLignes =
tableau.
rows.
length;
//
pour
fusionner
2
cellules
verticalement,
il
faut
nécessairement
créer
2
lignes
//
pour
fusionner
3
cellules
verticalement,
il
faut
créer
3
lignes,
etc.
//
dans
cet
exemple,
deux
cellules
seront
fusionnées
verticalement
ligne1 =
tableau.
insertRow
(-
1
);
//
création
d'une
ligne
1
pour
ajout
en
fin
de
table
ligne2 =
tableau.
insertRow
(-
1
);
//
création
d'une
ligne
2
pour
ajout
en
fin
de
table
//
création
et
insertion
des
cellules
dans
ligne1
cell =
ligne1.
insertCell
(0
);
//
création
et
insertion
de
la
cellule
0
dans
la
colonne
0
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
0
"
;
//
ajout
du
texte
dans
la
cellule
0
cell =
ligne1.
insertCell
(1
);
//
création
et
insertion
de
la
cellule
1
dans
la
colonne
1
cell.
rowSpan =
2
;
//
rowSpan=2
:
cette
cellule
prendra
donc
2
lignes
en
hauteur
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
1
"
;
//
ajout
du
texte
dans
la
cellule
1
cell =
ligne1.
insertCell
(2
);
//
création
et
insertion
de
la
cellule
2
dans
la
colonne
2
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
2
"
;
cell =
ligne1.
insertCell
(3
);
//
création
et
insertion
de
la
cellule
3
dans
la
colonne
3
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
3
"
;
//
création
et
insertion
des
cellules
dans
ligne2
cell =
ligne2.
insertCell
(0
);
//
création
et
insertion
de
la
cellule
1
dans
la
colonne
1
cell.
innerHTML =
"
Ligne
"
+
(nbLignes+
1
) +
"
Cellule
0
"
;
cell =
ligne2.
insertCell
(1
);
//
/!\
création
et
insertion
de
la
cellule
1
dans
la
colonne
2
//
la
colonne
1
est
déjà
prise
par
une
cellule
qui
prend
2
lignes
//
cette
cellule
d'index
1
sera
décalée
vers
la
droite
et
//
sera
donc
dans
la
colonne
d'index
2
cell.
innerHTML =
"
Ligne
"
+
(nbLignes+
1
) +
"
Cellule
2
"
;
cell =
ligne2.
insertCell
(2
);
//
/!\
création
et
insertion
de
la
cellule
2
dans
la
colonne
3
cell.
innerHTML =
"
Ligne
"
+
(nbLignes+
1
) +
"
Cellule
3
"
;
}
Comme précédemment, nous ne créons effectivement que trois cellules au lieu de quatre dans la seconde ligne car une des cellules de la première ligne a la hauteur de deux cellules.
Lien : Exemple d'utilisation de ce script
Lien : Comment ajouter une ligne dans une table ?
On utilise la fonction DOM insertRow(). L'utilisation de la propriété innerHTML est déconseillée dans ce cas. On considère trois cas de figure :
- insertion à la fin de la table ;
- insertion au début de la table ;
- insertion à un index défini.
Imaginons cette table :
<
table
id=
"
idTable
"
>
<
tr>
<
td>
Ligne 0 Cellule 0
<
/
td>
<
td>
Ligne 0 Cellule 1
<
/
td>
<
td>
Ligne 0 Cellule 2
<
/
td>
<
td>
Ligne 0 Cellule 3
<
/
td>
<
/
tr>
<
/
table>
Insertion à la fin de la table
function
insererLigne_Fin
(){
var
cell,
ligne;
//
on
récupère
l'identifiant
(id)
de
la
table
qui
sera
modifiée
var
tableau =
document.
getElementById
("
idTable
"
);
//
nombre
de
lignes
dans
la
table
(avant
ajout
de
la
ligne)
var
nbLignes =
tableau.
rows.
length;
ligne =
tableau.
insertRow
(-
1
);
//
création
d'une
ligne
pour
ajout
en
fin
de
table
//
le
paramètre
est
dans
ce
cas
(-1)
//
création
et
insertion
des
cellules
dans
la
nouvelle
ligne
créée
cell =
ligne.
insertCell
(0
);
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
0
"
;
cell =
ligne.
insertCell
(1
);
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
1
"
;
cell =
ligne.
insertCell
(2
);
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
2
"
;
cell =
ligne.
insertCell
(3
);
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
3
"
;
}
Insertion au début de la table
function
insererLigne_Debut
(){
var
cell,
ligne;
//
on
récupère
l'identifiant
(id)
de
la
table
qui
sera
modifiée
var
tableau =
document.
getElementById
("
idTable
"
);
//
nombre
de
lignes
dans
la
table
(avant
ajout
de
la
ligne)
var
nbLignes =
tableau.
rows.
length;
ligne =
tableau.
insertRow
(0
);
//
création
d'une
ligne
pour
ajout
au
début
de
la
table
//
le
paramètre
est
dans
ce
cas
(0)
//
création
et
insertion
des
cellules
dans
la
nouvelle
ligne
créée
cell =
ligne.
insertCell
(0
);
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
0
"
;
cell =
ligne.
insertCell
(1
);
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
1
"
;
cell =
ligne.
insertCell
(2
);
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
2
"
;
cell =
ligne.
insertCell
(3
);
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
3
"
;
}
Insertion à un index défini
function
insererLigne_indexN
(){
var
cell,
ligne,
n;
//
on
récupère
l'identifiant
(id)
de
la
table
qui
sera
modifiée
var
tableau =
document.
getElementById
("
idTable
"
);
//
nombre
de
lignes
dans
la
table
(avant
ajout
de
la
ligne)
var
nbLignes =
tableau.
rows.
length;
n =
prompt
("
Où
voulez-vous
insérer
une
ligne
?
\n
Entrez
une
valeur
entre
0
et
"
+
(nbLignes-
1
));
if
(n<
0
|
|
n >
(nbLignes-
1
))
{
alert
("
Erreur
"
);
return
;
}
ligne =
tableau.
insertRow
(n);
//
création
d'une
ligne
à
la
position
n
//
création
et
insertion
des
cellules
dans
la
nouvelle
ligne
créée
cell =
ligne.
insertCell
(0
);
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
0
"
;
cell =
ligne.
insertCell
(1
);
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
1
"
;
cell =
ligne.
insertCell
(2
);
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
2
"
;
cell =
ligne.
insertCell
(3
);
cell.
innerHTML =
"
Ligne
"
+
nbLignes +
"
Cellule
3
"
;
}
Pour supprimer une ligne dans un tableau (ou table), on considère trois cas de figure :
- suppression à la fin ;
- suppression au début ;
- suppression d'une ligne définie par son index dans la table (entre 0 et n-1).
On utilise la fonction DOM deleteRow().
Imaginons cette table :
<
table
id=
"
idTable
"
>
<
tr>
<
td>
Ligne 0 Cellule 0<
/
td>
<
td>
Ligne 0 Cellule 1<
/
td>
<
td>
Ligne 0 Cellule 2<
/
td>
<
td>
Ligne 0 Cellule 3<
/
td>
<
/
tr>
<
tr>
<
td>
Ligne 1 Cellule 0<
/
td>
<
td>
Ligne 1 Cellule 1<
/
td>
<
td>
Ligne 1 Cellule 2<
/
td>
<
td>
Ligne 1 Cellule 3<
/
td>
<
/
tr>
<
tr>
<
td>
Ligne 2 Cellule 0<
/
td>
<
td>
Ligne 2 Cellule 1<
/
td>
<
td>
Ligne 2 Cellule 2<
/
td>
<
td>
Ligne 2 Cellule 3<
/
td>
<
/
tr>
<
tr>
<
td>
Ligne 3 Cellule 0<
/
td>
<
td>
Ligne 3 Cellule 1<
/
td>
<
td>
Ligne 3 Cellule 2<
/
td>
<
td>
Ligne 3 Cellule 3<
/
td>
<
/
tr>
<
tr>
<
td>
Ligne 4 Cellule 0<
/
td>
<
td>
Ligne 4 Cellule 1<
/
td>
<
td>
Ligne 4 Cellule 2<
/
td>
<
td>
Ligne 4 Cellule 3<
/
td>
<
/
tr>
<
/
table>
Suppression à la fin
function
supprimerLigne_Fin
(){
//
on
récupère
l'identifiant
(id)
de
la
table
qui
sera
modifiée
var
tableau =
document.
getElementById
("
idTable
"
);
if
(tableau.
rows.
length)
{
tableau.
deleteRow
(-
1
);
//
suppression
d'une
ligne
en
fin
de
table
//
le
paramètre
est
dans
ce
cas
(-1)
}
}
Suppression au début
function
supprimerLigne_Debut
(){
//
on
récupère
l'identifiant
(id)
de
la
table
qui
sera
modifiée
var
tableau =
document.
getElementById
("
idTable
"
);
if
(tableau.
rows.
length)
{
tableau.
deleteRow
(0
);
//
suppression
d'une
ligne
au
début
de
la
table
//
le
paramètre
est
dans
ce
cas
(0)
}
}
Suppression d'une ligne définie par son index dans la table (entre 0 et n-1)
function
supprimerLigne_indexN
(){
var
n;
//
on
récupère
l'identifiant
(id)
de
la
table
qui
sera
modifiée
var
tableau =
document.
getElementById
("
idTable
"
);
//
nombre
de
lignes
dans
la
table
(avant
suppression
de
la
ligne
n)
var
nbLignes =
tableau.
rows.
length;
n =
prompt
("
Numéro
de
la
ligne
à
supprimer
?\nEntrez
une
valeur
entre
0
et
"
+
(nbLignes-
1
));
if
(n <
0
|
|
n >
(nbLignes-
1
))
{
alert
("
Erreur,
valeur
incorrecte
"
);
return
;
}
if
(tableau.
rows.
length)
{
tableau.
deleteRow
(n);
//
suppression
d'une
ligne
à
l'index
n
}
}
Si on veut modifier la valeurBonjour, il suffit de faire :
document.
getElementById
('
cel
'
).
innerHTML =
"
Au
revoir
"
;
Nous pouvons obtenir une scrollbar à gauche en ajoutant une div autour du tableau, contrôlant le défilement dans celui-ci :
<
div
dir=
"
rtl
"
style=
"
height:100px;overflow-y:scroll;
"
>
<
table
border=
"
1
"
style=
"
width:100%
"
dir=
"
ltr
"
>
<
tr>
<
td>
bla bla bla bla<
/
td>
<
td>
bla bla bla bla<
/
td>
<
td>
bla bla bla bla<
/
td>
<
/
tr>
<
/
table>
<
/
div>
C'est l'attribut dir="rtl" qui permet d'inverser la position de la scrollbar (rtl = right to left). Avec cet attribut, la barre de défilement est à gauche mais le texte de la table s'écrit également de droite à gauche (mis en évidence par l'attribut width:100% sur la table). Par conséquent, il faut ajouter dans la balise table l'attribut inverse : dir="ltr".