J'ai du HTML comme ça:
<span id="cod">Code:</span> <span>12345</span>
<span>Category:</span> <span>faucets</span>
Je veux récupérer le nom de la catégorie ("robinets"). Voici mon essai:
var $ = cheerio.load(html.contents);
var category = $('span[innerHTML="Category:"]').next().text();
Mais cela ne fonctionne pas (le modificateur innerHTML
ne sélectionne rien).
Un indice?
La raison pour laquelle votre code ne fonctionne pas est que [innerHTML]
Est un sélecteur d'attribut et innerHTML
n'est pas un attribut sur l'élément (ce qui signifie que rien n'est sélectionné).
Vous pouvez filtrer les éléments span
en fonction de leur texte. Dans l'exemple ci-dessous, .trim()
est utilisé pour couper tout espace blanc. Si le texte est égal à "Catégorie:", alors l'élément est inclus dans l'ensemble filtré des éléments renvoyés.
var category = $('span').filter(function() {
return $(this).text().trim() === 'Category:';
}).next().text();
L'extrait ci-dessus filtrera les éléments si leur texte est exactement "Catégorie:". Si vous souhaitez sélectionner des éléments si leur texte contient cette chaîne, vous pouvez utiliser le sélecteur :contains
(Comme indiqué dans les commentaires):
var category = $('span:contains("Category:")').next().text();
Alternativement, l'utilisation de la méthode .indexOf()
fonctionnerait également:
var category = $('span').filter(function() {
return $(this).text().indexOf('Category:') > -1;
}).next().text();