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 :

Récupérer les références DOM


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 494
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 494
    Par défaut Récupérer les références DOM
    bonjour,
    developpez.net/forums/d1948570/javascript/general-javascript/utilisation-innerhtml/#post10801124

    dans ce post : Watilin fait reference aux elements du DOM
    bien que les "selecteurs" soient les memes, les references non

    => exist-il un moyen de recuperer ces references (uniques) en JS ?
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  2. #2
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    heu, je vois pas trop, pour moi Watilin parle de "référence" dans un sens imagé, et ne s'est pas aventuré à décortiquer le mécanisme du software interne des différents moteurs d'interprétation HTML et JS

  3. #3
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 494
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 494
    Par défaut
    Citation Envoyé par Watilin
    Ce n’est plus le même élément DOM, et les références sont brisées, en particulier les gestionnaires d’évènements qui y étaient attachés
    le navigateur semble faire la difference en un element issue d'un selecteur (exemple document.getElementById()) et l'element du dom a proprement parler qu'il manipule

    ca va etre grossier, mais voici ce que j'essaye de dire :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <span id="span1">mon span 1</span>
    <span id="span2">mon span 2</span>
    <span id="span3">mon span 3</span>
    pour le navigateur : le span1 aura un genre d'id interne A, le span2 B et le span3 C

    si maintenant on applique :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var span2 = document.getElementById('span2');
    span2.parentNode.removeChild(span2);
     
    var newSpan2 = document.createElement('span');
    newSpan2.textContent = 'new span 2';
    var span3 = document.getElementById('span3');
    span3.insertBefore(newSpan2, span3.firstChild);
    le resultat sera sensiblement le meme (j'ai juste mis "new span 2" en textContent qu'on voit bien que le span change)

    ce que dis Watilin, c'est que de faire ca, change la reference de l'element (bien que le selecteur de notre cote soit le meme)

    pour le navigateur : span2 aura un id interne D (et non B comme avant)
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  4. #4
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    ça reste des élucubrations, et perso, je doute qu'il existe une table d'allocation mémoire pour chaque élément, mais plutôt une pile, plus pratique pour la gestion de bac à sable avec le passage d'un onglet à un autre, et qui devient une gestion de mémoire dynamique ou on oublie les adresse fixes qui prévalaient aux premiers temps de l'informatique.

    De toutes façons c'est la cuisine interne de chaque marque de navigateur, ce qui pourrait marcher sur un Firefox à peu de chance de fonctionner sur chrome ou Edge, ou IE, ou Konqueror...

  5. #5
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 494
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 494
    Par défaut
    si c'est pas possible, tant pis ^^
    merci de me l'avoir confirme
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Bonjour,
    je dois admettre que je n'ai absolument rien compris aux propos tenus

    Ce qui est dit par Watilin, si je ne m'abuse, c'est que tu « perds » l'objet initialement contenu qui est remplacé par un nouvel élément recrée lors de l'utilisation de innerHTML.

    Ceci étant ton élément substitué existe toujours comme tu as une référence à celui-ci, dans ton cas var span2, tu donc peux encore l'utiliser.

    Fait simplement ce test sur base de cette structure
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <div> 
      <span id="span1">mon span 1</span>
      <span id="span2">mon span 2</span>
      <span id="span3">mon span 3</span>
    </div>
    exécute ce script
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var span2 = document.getElementById('span2');
    var oParent = span2.parentNode;
     
    oParent.removeChild(span2);
     
    var newSpan2 = document.createElement('span');
    newSpan2.textContent = 'new span 2 ';
     
    var span3 = document.getElementById('span3');
    oParent.insertBefore(newSpan2, span3);
     
    oParent.appendChild(span2);  // il est toujours référencé et donc manipulable

    Nota: je déplace vers JavaScript ce qui semble plus indiqué.

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Citation Envoyé par Doksuri Voir le message

    si maintenant on applique :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var span2 = document.getElementById('span2');
    span2.parentNode.removeChild(span2);
     
    var newSpan2 = document.createElement('span');
    newSpan2.textContent = 'new span 2';
    var span3 = document.getElementById('span3');
    span3.insertBefore(newSpan2, span3.firstChild);
    le resultat sera sensiblement le meme (j'ai juste mis "new span 2" en textContent qu'on voit bien que le span change)
    Si on veut trois span comme au début il faudrait remplacer span3.insertBefore(newSpan2, span3.firstChild); (avec cette instruction la span "newSpan2" sera à l'intérieur de span#span3) par span3.parentNode.insertBefore(newSpan2, span3); (avec cette instruction la span "newSpan2" sera placée après span#span1 et avant de span#span3 ce qui correspond à la structure de départ).

    Mais même dans ce cas il me semble que la span "newSpan2" et span#span2 n'ont rien à voir l'un avec l'autre...

    ------
    Par contre il y a une chose qui rejoint le sujet du fil Les fuites de mémoire...
    EDIT : j'ai déplacé ce passage dans le fil indiqué ici : #4

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/12/2007, 13h52
  2. [DOM] Récupérer les attributs d'une classe CSS ?
    Par titoumimi dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 10/07/2007, 14h33
  3. Réponses: 1
    Dernier message: 07/06/2007, 08h40
  4. auto-référence : récupérer les valeurs.
    Par storm_2000 dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/11/2006, 23h52
  5. [DOM Javascript]Récupérer les attributs
    Par gabychon dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/05/2006, 15h21

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