0
votes

Comment diviser le résultat de QuerySelectorall?

J'ai été capable de demander à QuerySelectorAll le nom de classe correct, une balise et href. J'essaie de scinder mon résultat afin que je n'ai que le sku #.

html xxx

js xxx


6 commentaires

Utiliser des expressions régulières.


Merci. Je ne suis pas familier avec regex. Est-ce que j'utiliserais la regex avant ou après la boucle?


S'il vous plaît voir ma réponse pour une utilisation régulière d'expression dans ce cas.


Merci pour l'exemple. Je viens d'essayer ça. Et si mon sku est amixe de chiffres et de lettres. Par exemple: Fdufg002. Comment cela changerait-il l'expression?


Cela changerait un peu, As / D + recherche des occurrences où les numériques existent sous forme de 1 ou plusieurs caractères numériques.


J'ai modifié ma réponse pour vous donner quelque chose qui fonctionnerait avec une combinaison de lettres et de chiffres utilisant juste substrant et remplacer et lastindexof


4 Réponses :


0
votes

Vous pouvez utiliser une expression régulière simple pour correspondre au SKU #

p>

<div class="mini-cart-product-name">
   <a href="http://example.com/product/12345.html">Product 1</a>
   </div>

   <div class="mini-cart-product-name">
   <a href="http://example.com/product/67890.html">Product 2</a>
    </div>


1 commentaires

Merci. Je reçois une erreur quand je l'exécute. Je ne sais pas si c'est moi ou un problème avec le code.



0
votes
 //Since you revised your criteria, you can do this with a simple string substring and replace
const skuNum = URL.item(i).substring(URL.item(i).lastIndexOf('/') + 1).replace('.html', '');    


//Don't use this if you have something other than numbers in the capture string, see above
//Declare your regular expression, this could be declared before your loop
const reg = /(\d+)\.html/g;
//These next two go inside your loop
//Get the match collection of captures from your regular expression
const matches = reg.exec(URL.item(i));
//Get your sku # from the match colletion
const skuNum = matches[1];

0 commentaires

0
votes

Les deux de la réponse mentionnée précédemment sont correctes, mais une telle approche semble douloureuse. Si vous pouvez modifier votre code HTML, je vous suggérerais de transmettre ces SKU comme attribut de données.

function GetCartProducts() {
    var SKUs = [];
    var URL = document.querySelectorAll(".mini-cart-product-name a");
    for (var i = 0; i < URL.length; i++) {
        SKUs[i] = URL[i].dataset.sku;
    }
    console.log(SKUs);
}
GetCartProducts();


1 commentaires

Merci de votre réponse, mais il n'y a aucun moyen de modifier le HTML à ce stade à temps.



0
votes

La fonction peut être une seule ligne comme celle-ci.

p>

<div class="mini-cart-product-name">
  <a href="http://example.com/product/12345.html">Product 1</a>
</div>

<div class="mini-cart-product-name">
  <a href="http://example.com/product/67890.html">Product 2</a>
</div>


1 commentaires

Merci. Cette réponse fonctionne bien pour mes besoins actuels.