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

jQuery Discussion :

Comment savoir si un element qui n'est plus dans le DOM est détaché ou enlevé


Sujet :

jQuery

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2014
    Messages : 199
    Points : 70
    Points
    70
    Par défaut Comment savoir si un element qui n'est plus dans le DOM est détaché ou enlevé
    Bonjour,

    Quand je n'utilise plus un element dans le dom et qu'il n'est plus visible, j'utilise "detach()" pour l'enlever du DOM.
    Cela l'enleve du dom mais je peux a tout moment le remettre sans que celui est perdu ces evènement, etc...

    Quand je sais qu'un element ne va plus servir, je l'enleve du DOM avec "remove()"

    J'aimerais pour voir savoir si un element est dans le DOM ou, s'il n'y est pas, si celui-ci est détaché (detach()) ou enlevé (remove())...

    Avec cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $.contains(document.documentElement, element.get(0))
    Je peux savoir si l'élément est dans le DOM ou pas.
    Par contre, je ne sais pas s'il est détaché ou enlevé.

    Comment faire pour obtenir cette distinction ?

    Par avance, Merci
    Sylo

  2. #2
    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 olysmar2 Voir le message
    [...] J'aimerais [...] savoir si un element est dans le DOM ou, s'il n'y est pas, si celui-ci est détaché (detach()) ou enlevé (remove()) [...]
    Bonjour

    C'est possible en utilisant compareDocumentPosition

    Exemple à tester

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <div id="haut" class="centeredDiv">
      <div id="interne">
        <p>Bonjour</p>
      </div>
    </div>

    Code JavaScript : 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
    var divHaut = document.querySelector( "#haut" );
     
    // test contains
    console.log( "#interne : ", divHaut.contains( document.querySelector( "#interne" ) ) ); // true
     
    // test compareDocumentPosition
    /*
     * DOCUMENT_POSITION_DISCONNECTED	1
     * DOCUMENT_POSITION_PRECEDING	2
     * DOCUMENT_POSITION_FOLLOWING	4
     * DOCUMENT_POSITION_CONTAINS	8
     * DOCUMENT_POSITION_CONTAINED_BY	16
     * DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC	32
     */ 
    console.log( "#interne : ", divHaut.compareDocumentPosition( document.querySelector( "#interne" ) ) ); // 20 = 16 + 4
     
    var ancienNoeud = divHaut.removeChild( document.querySelector( "#interne" ) );
     
    console.log( "textContent = ", ancienNoeud.textContent );
     
    ancienNoeud.textContent = "Hello !";
     
    // test contains
    console.log( "ancienNoeud : ", divHaut.contains( ancienNoeud ) ); // false
     
    // test compareDocumentPosition
    console.log( "ancienNoeud : ", divHaut.compareDocumentPosition( ancienNoeud ) ); // 37 = 32 + 4 + 1
     
    divHaut.appendChild( ancienNoeud );
     
    // test contains
    console.log( "ancienNoeud : ", divHaut.contains( ancienNoeud ) ); // true
     
    // test compareDocumentPosition
    console.log( "ancienNoeud : ", divHaut.compareDocumentPosition( ancienNoeud ) ); // 20 + 16 + 4
     
    setTimeout( function(){
      divHaut.removeChild( document.querySelector( "#interne" ) );
     
      // test contains
      console.log( divHaut.contains( ancienNoeud ) ); // false
     
      // test compareDocumentPosition
      console.log( divHaut.compareDocumentPosition( ancienNoeud ) ); // 37 = 32 + 4 + 1 parce que ancienNoeud existe toujours !
     
      ancienNoeud = null;
     
     
      try {
        // test compareDocumentPosition
        // Failed to execute car ancienNoeud n'existe plus
        console.log( divHaut.compareDocumentPosition( ancienNoeud ) );
      }
      catch( er ) {
        console.error( "ancienNoeud : ", er.message );
      }
     
      try {
        // test compareDocumentPosition
        // Failed to execute car document.querySelector( "#interne" ) n'existe plus
        console.log( divHaut.compareDocumentPosition( document.querySelector( "#interne" ) ) );
      }
      catch( er ) {
        console.error( 'document.querySelector( "#interne" ) : ', er.message );
      }
     
    }, 5000 )

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Je prends le risque d’enfoncer des portes ouvertes… As-tu pensé à vérifier que son parentElement n’est pas null ?
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/04/2010, 20h37
  2. [HTML 5] Comment avoir deux bouton sumbit qui envoie le formulaire dans 2 pages différentes
    Par pierrot10 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 09/03/2010, 06h54
  3. Réponses: 3
    Dernier message: 22/10/2009, 17h30
  4. Réponses: 11
    Dernier message: 08/04/2009, 09h45
  5. Réponses: 6
    Dernier message: 07/09/2006, 15h35

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