Partage
  • Partager sur Facebook
  • Partager sur Twitter

Objet littéral en argument d'une fonction

Comportement qui m'échappe.

    15 novembre 2019 à 18:44:22

    Bonjour, je me suis fait un petit script qui récupère le contenu de mes nouveaux messages. Seulement je butte sur un problème.

    Je souhaite que quand il y a une 2eme page de messages à lire, le contenu de la seconde page soit ajouté dans la meme variable que la premiere, j'ai essayé de concaténer 2 tableau mais ca ne marchait pas car getElementsByClassName ne renvoie pas un vrai array. Du coup j'ai pensé à tout mettre dans un objet littéral. Seulement j'obtiens un résultat incompréhensible. 

    Le console.log 1 renvoie une donnée cohérente, rapport.liste0 contient bien la collection de message.

    Seulement après l'appel de la fonction swaperPageRapport le console.log2 affiche déjà quelque chose d'échange, le contenu de .liste0 a été remplacé par ceux que devra contenir .liste1 avant même que getElementsByClassName ne soit utilisée.

    J'imagine que j'ai mal fait quelque chose en déclarant ou en envoyant mon objet littéral, ou en ajoutant la nouvelle propriété liste1. Pourriez vous me préciser la marche à suivre svp?


            var rapport = {};
            var liste = "liste0";
            rapport[liste] = document.getElementsByClassName('new msg')
            console.log("1:   " + rapport[liste]);
            var c = (rapport[liste].length - 1);
            if (rapport[liste][c].nextElementSibling.className == "pagination")
            {
            document.querySelector("#genericpage > ul > ul:nth-child(12) > li:nth-child(4)").click();
            setTimeout(swaperPageRapport, 2500, rapport, 1);
            return 0;
            }
    
    function swaperPageRapport(rapport, id)
    {
        var liste = "liste" + id;
        console.log(rapport.liste0);
        rapport[liste] = document.getElementsByClassName('msg msg_new');
        console.log(rapport[liste]);
    }
    



    -
    Edité par RomainSanchez3 15 novembre 2019 à 19:19:01

    • Partager sur Facebook
    • Partager sur Twitter
      15 novembre 2019 à 19:30:00

      bonjour ,
      var msgs = [...document.getElementsByClassName('new msg')]
      // msgs contient un "vrai" tableau .
      Syntaxe "..." , le spread MDN[fr]

      -
      Edité par SamuelGaborieau3 15 novembre 2019 à 19:32:35

      • Partager sur Facebook
      • Partager sur Twitter

      suggestion de présentation.

        15 novembre 2019 à 20:05:31

        Alors si je comprend bien, l'utilisation de "..." permet de déstructurer n'importe quel objet qui a une structure qui permet de la parcourir via des index (donc itérable si j'ai bien compris) comme un objet avec ses méthodes et propriétés ou un autre tableau c'est bien ça?

        donc si j'écris 

        [...document.getElementsByClassName('new msg')]

        c'est comme si j'obtenais 

        [elementHTML1, elementHTML2, elementHTML3,etc];

        c'est bien ca? Navré je débute en js donc je parle encore en terme simple.

        EDIT: Merci pour ton aide, ça me sera surement utile à l'avenir. Mais mon problème était plus profond que ça. C'était évident et j'aurais du comprendre ça plus tôt, enfait j'ai réalisé que les éléments retournaient par le getElements sont un peu comme des pointeurs vers des emplacement dans le code html de la page actuelle, donc forcément en changeant de page de message, les précédent getElements obtenus pointe vers la nouvelle page même si il ne s'agit pas d'un rafraîchissement, ils ont pas sauvé tout le contenu de l’élément en question (enfin j'aurais pu avec un innerHTML j'imagine). Du coup j'ai simplement réarrangé mon code pour que l'extraction des données clé dans les messages se fassent avant de changer de page plutôt que tout faire après.

        -
        Edité par RomainSanchez3 15 novembre 2019 à 21:03:13

        • Partager sur Facebook
        • Partager sur Twitter
          15 novembre 2019 à 21:07:53

          Bonjour RomainSanchez3 ,

          Tu peux aussi dans ton cas utiliser normalement  "rapport[liste].item(c)"

          car document.getElementsByClassName('new msg') renvoi une HTMLCollection

          Voir https://developer.mozilla.org/fr/docs/Web/API/HTMLCollection

          • Partager sur Facebook
          • Partager sur Twitter
          Découvrez les Css avec la zonecss.fr

          Objet littéral en argument d'une fonction

          × 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