11484 sujets

JavaScript, DOM et API Web HTML5

Bjr

J'ai un script qui consiste à parcourir une liste de produit et cliquer dessus si le produit contient le mot clé recherché (ici en regex). Il faudrait reload la page et refaire l'action tant qu'aucune correspondance n'a été trouvée.
J'utilise donc une boucle while. Le problème est que l'action (du a la rapidité d’exécution de la boucle for) s'exécute trop vite et j'ai donc des milliers de reload en quelques secondes. Ducoup la code s'exécute dans le vide puisque la page n'a même pas le temps de chargée. (J'ai déjà essayé de mettre tout ça dans un window.onload mais ça marche pas)

 const keywords = '.*Bxer.*'.toLowerCase()
      const color = 'white'.toLowerCase()
      var ElementCount = document.querySelector('#container').childElementCount
      var r = 1

      while(r = 1) {

      for(var i=0; i < ElementCount; i++) {
  
        var element_product = document.querySelectorAll('#container > article > div > h1 > a')[i].innerText.toLowerCase()
        var element_color = document.querySelectorAll('#container > article > div > p > a')[i].innerText.toLowerCase()
        var regex_product =  new RegExp(keywords)
        var regex_color = new RegExp(color)
  
        if (element_product.match(regex_product) && element_color.match(regex_color)) {
          document.location.href = document.querySelectorAll('#container > article > div > h1 > a')[i].href
          r = 0
          break;
        }
        if (i == (ElementCount - 1) && !element_product.match(regex_product)) {
          document.location.reload(true)
        }
      }
      }


merci bcp,
matt
Modifié par mattzeub (27 Jun 2019 - 12:46)
Je ne sais pas si c est toujours d acualité mais je me lance.
Moi perso je procéderais ainsi :

je supprime la boucle while.

quand tout est chargé :
j initialise une variable vide
J exécute la boucle for
'Dans mon break' je mets l url à cliquer en variable initialement vide .

à la sortie de la boucle for je teste la variable , si elle est vide, je recharge la page sinon je redirige..

Perso je raisonne en 'deplhiste' et m initie à peine à jquery pour des besoins pro mais le raisonnement est le même.

Mais je n arrive tout de même pas à comprendre pourquoi tu recharges la page pour boucler sur la même liste.
Tu peux m éclairer stp ?
Modérateur
En fait le problème est juste là: un classique
while(r = 1) {


La solution étant
while(r == 1) {