[tableau] Problème tableaux et boucles

Résolu
XecK Messages postés 386 Date d'inscription   Statut Membre Dernière intervention   -  
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   -
Etant débutant en javascript, je voulais utiliser une boucle pour créer un tableau, mais ça ne marche pas, après pas mal de recherches, je ne trouve toujours pas donc je me tourne vers vous :
$(document).ready(function() {
    var tableau = new Array();
    for(var i=0 ; i<20 ; i++) {
        tableau[i] = new Array();
        $('#main table').append('<tr>');
        for(var j=0 ; j<10 ; j++) {
            if (Math.round(Math.random()*10)==1) {
                tableau[i][j] = 'X';
                $('#main table').append('<td>X</td>');
            }
            else {
                tableau[i][j] = ' ';
                $('#main table').append('<td> </td>');
            }
        }
        $('#main table').append('</tr>');
    }
});


Le code HTML est :
<!doctype html>
<html>
    <head>
        <title>Test</title>
        <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    </head>
    <body>
        <div id="main">
            <table border="1"></table>
        </div>
        <script>
            <!--Mon script-->
        </script>
    </body>
</html>


Normalement, le tableau devrais prendre la forme d'un tableau à 20 lignes et 10 colonnes :

<tr><td></td><td></td>........</tr><tr>...............

Mais je ne sais pas pourquoi, j'obtiens ceci :

<tbody><tr></tr><tr></tr>......</tbody><td></td><td></td>.........

J'ai essayé de comprendre en mettant un alert avant chaque append, mais là c'est dans le bon ordre, et la sortie toujours dans le mauvais...

Si je n'ai pas été clair, demandez moi.

Merci d'avance
A voir également:

4 réponses

Utilisateur anonyme
 
Bonjour

Je ne m'y connais pas en jQuery, mais ça ne m'étonne qu'à moitié. Tu essayes d'insérer des <td> directement dans un élément <table>, alors qu'il faudrait les insérer dans un élément <tr>.
À ta place, je mettrais tout dans une grande chaîne, et à la fin un seul coup de innerHTML pour créer le tableau.
0
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
Salut !

Le append insert directement en dessous, donc effectivement comme l'a dit le père tu insers tes tr et tes td directement dans <table>
Deplus avec le append tu rempli tu tableau en "poussant" les éléments donc tu bas le générer de bas en haut.

Le truc c'est que tu génères bien le tableau en js, mais celui en html non.

Je te propose ca :
$(document).ready(function() {
    var tableau = new Array();
    for(var i=0 ; i<20 ; i++) {
        tableau[i] = new Array();
        var tr = '<tr>';
        for(var j=0 ; j<10 ; j++) {
            if (Math.round(Math.random()*10)==1) {
                tableau[i][j] = 'X';
                tr = tr + '<td>X</td>';
            }
            else {
                tableau[i][j] = ' ';
                tr = tr + '<td> </td>';
            }
        }
        tr = tr + '</tr>';
        $('#main table').html($('#main table').html()+tr);
    }
});



Jérémy
0
XecK Messages postés 386 Date d'inscription   Statut Membre Dernière intervention   54
 
Merci pour vos réponses, effectivement ça fonctionne comme ça, mais j'ai aussi réussi à le faire marcher en ajoutant <tbody></tbody> dans ma table, et exécuter les append sur l'élément #main table tbody, et ça marche.

Mais je crois que je vais prendre votre solution qui marche plus comme je le souhaitais.
0
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
Rien t'empèche de mettre un tbody ;-) Tu feras simplement :
$('#main table tbody').html($('#main table tbody').html()+tr);
0