IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

petite surprise avec le DOM [FAQ]


Sujet :

JavaScript

  1. #1
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut petite surprise avec le DOM
    bonjour
    voici une curriosité à la quelle je ne m'attendais pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    elem = document.getElementById('montruc');
    kids = elem.childNodes;
    for (i = 0; i < kids.length; i++) {
      elem.removeChild(kids[i];
    }
    ce code ne fonctionne pas.
    il ne supprime pas tous les enfants de montruc
    chose étrange i faut toujours supprimer l'élément 0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    elem = document.getElementById('montruc');
    kids = elem.childNodes;
    for (i = 0; i < kids.length; i++) {
      elem.removeChild(kids[0];
    }
    kids[i] n'existe plus si les Ëkids jusqu'à i-1 ont été supprimé.


    A+jyt

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Points : 1 093
    Points
    1 093
    Par défaut
    je ne sais pas si c'est la raison, mais je commencerais par fermer les parenthèses derrière ta dernière instruction

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Points : 1 093
    Points
    1 093
    Par défaut
    et je ne connais pas l'instruction removeChild, mais est-il possible que si tu 'remove' un élément, ton elem en a un de moins, et que du coup kids.length est diminué de 1 ?
    Et peut-être que quand tu démarres ta boucle, kids.length est stocké par php dans une pile temporaire faisant ainsi que la boucle continue jusqu'à la valeur initiale de kids.length ?
    Ce ne sont que des suppositions, mais cela expliquerait je pense

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    mais est-il possible que si tu 'remove' un élément, ton elem en a un de moins, et que du coup kids.length est diminué de 1 ?
    C'est le cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(elem.hasChildNodes())
    {
        elem.removeChild(elem.firstChild);
    }
    Boost ftw

  5. #5
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    sekaijin tu as un problème bien connu qui est celui de la taille d'un tableau qui diminue au fur et à mesure qu'on lui enlève des éléments.

    Imagine que tu ai 10 éléments enfants ; au bout du 5eme tu as i=5 et kids.length = 5, la condition de ta boucle for n'est plus respecté et elle s'arrête.

    À toi de trouver une des nombreuses solutions.
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    commencer par le dernier ....
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    en fait apparement le DOM retourne une des collections qui s'utilise au niveau de la syntaxe comme des tableau mais qui en réalité n'en sont pas.

    A+jyt

  8. #8
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    personnellement, je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(element.lastChild) {element.removeChild(element.lastChild)}

Discussions similaires

  1. [DOM] Petit soucis avec innerHTML et ie
    Par dervish dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 21/11/2008, 20h17
  2. petit probleme avec l'éditeur de builder
    Par qZheneton dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/10/2004, 16h19
  3. [CVS] Petits déboires avec JBuilder9 et CVS
    Par Marc_P dans le forum JBuilder
    Réponses: 2
    Dernier message: 19/02/2004, 09h35
  4. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52
  5. [debutant] pour debbuger un petit prog avec menu
    Par niluge01 dans le forum Windows
    Réponses: 3
    Dernier message: 22/11/2003, 14h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo