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 :

Supprimer des éléments svg du dom


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Femme Profil pro
    amateur
    Inscrit en
    Juillet 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : amateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 17
    Points : 22
    Points
    22
    Par défaut Supprimer des éléments svg du dom
    Bonjour

    Dans le code suivant :
    https://jsfiddle.net/wm2oh6fx/1/

    je veux que l'utilisateur puisse augmenter ou diminuer le nombre de disques.
    je supprime les précédents avant d'en créer de nouveaux.

    Lorsque je descends le nombre de disques, il y a parfois des "ratés" (des disques qui ne se suppriment pas).
    Quelle peut être la raison ?

    merci d'avance de toute aide.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 060
    Points : 44 585
    Points
    44 585
    Par défaut
    Bonjour,
    la méthode getElementsByTagNameNS retourne une nodeList qui est une liste des noeuds « vivante»ce qui signifie que lorsque tu supprimes un élément auquel elle fait référence cette liste est mise à jour et sa longueur change.

    Tu peux remplacer ta boucle par celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while(disques[0]){
        disques[0].parentNode.removeChild(disques[0])
    }

  3. #3
    Membre à l'essai
    Femme Profil pro
    amateur
    Inscrit en
    Juillet 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : amateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 17
    Points : 22
    Points
    22
    Par défaut
    merci bien.

    Si j'ai bien compris, une boucle descendante devrait être bonne aussi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    let lg = disques.length;
    for(let k = lg-1 ; k  >= 0; k -= 1){
    	let disque = disques[k];
    	disque.parentNode.removeChild(disque);
    }

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Citation Envoyé par nthl.roche Voir le message
    [...] Lorsque je descends le nombre de disques, il y a parfois des "ratés" (des disques qui ne se suppriment pas). [...]


    C'est plus fluide en travaillant sur l'événement input.

    Mon code de test :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    <!DOCTYPE html>
    <html lang="fr" dir="ltr">
    <head>
      <meta http-equiv="cache-control" content="public, max-age=60">
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <meta name="author" content="Daniel Hagnoul">
      <title>Test</title>
      <style>
        label {
          display: block;
        }
      </style>
      <script>
        'use strict';
        
        document.addEventListener( 'DOMContentLoaded', ev => {
          
        }, false );
        
        window.addEventListener( 'load', ev => {
          
          const
            nbdisquesinput = document.querySelector( "#nbdisques" ),
            angleinput = document.querySelector( "#angle" ),
            zoneFig = document.querySelector( "#zoneFig" ),
            svg = document.createElementNS( "http://www.w3.org/2000/svg", "svg" ),
            Ax = 10,
            Ay = 10,
            Bx = 10,
            By = 40,
            rayon = 20,
            centrex = 10 + Math.sqrt( 175 ),
            centrey = 25;
            
          svg.setAttribute( "width", 800 +'px' );
          svg.setAttribute( "height", 300 +'px' );
          svg.setAttribute( "viewBox", "0 0 800 300" );
          
          zoneFig.appendChild( svg );
          
          function disque( angle, nb ){
            const
              disques = document.getElementsByTagNameNS( "http://www.w3.org/2000/svg", "path" );
              
            let disquetronque;
            
            for( let disque of Array.from( disques ) ){
              disque.parentNode.removeChild( disque );
            }
            
            for( let k = 0; k < nb; k++ ){
              disquetronque = document.createElementNS( "http://www.w3.org/2000/svg", "path" );
              
              disquetronque.setAttribute( "d", 'M' + Ax + ' ' + Ay + 'A' + rayon + ' ' + rayon + ' 0 1 1 ' +  Bx  + ' ' + By + ' ' +'Z' );
              disquetronque.setAttribute( "style", "stroke:orange;fill:yellow;stroke-width:3px;" );
              disquetronque.setAttribute( 'transform', "translate(" + ( k * 2.5 * rayon ) + "," + "0) rotate(" + ( k * angle ) + "," + centrex + "," + centrey +")" );
              
              svg.appendChild( disquetronque );
            }
          }
          
          nbdisquesinput.addEventListener( 'input', () => {
            disque( angleinput.value, nbdisquesinput.value )
          }, false );
          
          angleinput.addEventListener( 'input', () => {
            disque( angleinput.value, nbdisquesinput.value )
          }, false );
          
        }, false );
      </script>
    </head>
    <body>
      <main>
     
        <label for="nbdisques">
          Entrez le nombre de disques : <input type="number" value="4" step="1" min="1" max="15" id="nbdisques">
        </label>
        <label for="angle">
          Entrez l'angle de rotation : <input type="number" value="15" step="5" min="5" max="355" id="angle">
        </label>
        <div id="zoneFig"></div>
     
      </main>
    </body>
    </html>

Discussions similaires

  1. Supprimer des éléments du DOM
    Par aztec dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 02/05/2011, 22h09
  2. [DOM]Supprimer des éléments d'une page HTML
    Par witch dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 05/02/2009, 16h37
  3. Réponses: 7
    Dernier message: 16/05/2006, 15h40
  4. Supprimer des éléments dans une TreeView ?
    Par souch dans le forum Composants VCL
    Réponses: 4
    Dernier message: 16/09/2005, 12h20
  5. Supprimé des éléments vide d'un tableau
    Par shinux2004 dans le forum Langage
    Réponses: 4
    Dernier message: 04/07/2005, 19h40

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