FAQ JavaScript
FAQ JavaScriptConsultez toutes les FAQ
Nombre d'auteurs : 43, nombre de questions : 176, dernière mise à jour : 29 août 2021
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 ?
\n
Entrez 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".