Partage
  • Partager sur Facebook
  • Partager sur Twitter

[DOM] Problème avec insertBefore()

Ca n'affiche rien...

    23 octobre 2006 à 22:48:40

    Bonjour à tous !

    J'ai un léger problème en DOM que je n'arrive décidément pas à résoudre. :)
    J'ai un tableau dans lequel je voudrais rajouter une ligne toutes les 4secondes (ne me demandez pas quelle est l'utilité de ce script ^^ ) et j'ai donc réalisé le code javascript suivant :

    setTimeOut() ...
    var ligne = document.createElement('tr');
    var carreau1 = document.createElement('td');
    carreau1.setAttribute('colspan','7');
    var texteCarreau1 = document.createTextNode('test');

    carreau1.appendChild(texteCarreau1);
    ligne.appendChild(carreau1);

    tableau = document.getElementById('container');
    dernierElement = tableau.getElementsByTagName('tr')[0];
    tableau.insertBefore(ligne, dernierElement)


    Pour vous aider à vous repérer, voici le schéma de mon tableau tel qu'au chargement de la page :

    <table id="container">
    <tr id="components">
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
    </tr>
    <tr id="message1">
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
    </tr>
    <tr id="message2">
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
    </tr>
    </table>


    Fait comme ca, la console javascript n'affiche aucune erreur mais rien ne s'affiche !
    En utilisant : tableau.appendChild(liste), les lignes s'ajoutent une par une mais tout en bas du tableau, c'est à dire en dernier.

    Ce que je voudrais serait justement d'afficher la nouvelle ligne en premiere position dans le tableau.

    Pouvez vous m'aider ?
    Merci d'avance ;)
    • Partager sur Facebook
    • Partager sur Twitter
      25 octobre 2006 à 15:57:08

      Hala le dom et les tableaux, ça fait pas bon ménage :D

      En réalité quand tu écrit le code html pour faire un tableau:

      <table>
        <tr>
          <td>
            Une case
          </td>
        </tr>
      </table>

      Il est transformé pour correspondre à la structure de tableau avec thead, tbody et tfooter.
      D'ailleurs avec un explorateur de dom on obtient le code:

      <table>
       <tbody>
        <tr>
          <td>
            Une case
          </td>
        </tr>
       </tbody>
      </table>


      Donc ton code ne passe pas car tableau n'est pas le parent (direct) de dernierElement.
      (au passage, dernierElement dans ton code source correspond à la première ligne Oo )

      donc :

      var tbody       =      tableau.getElementsByTagName('tbody')[0];
              tbody.insertBefore(ligne, dernierElement);


      Ou alors forme qui marche à tout les coups pour insertBefore:

      dernierElement.parentNode.insertBefore(ligne, dernierElement);
      • Partager sur Facebook
      • Partager sur Twitter

      [DOM] Problème avec insertBefore()

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown