donc j'utilise Cheerio, une bibliothèque similaire à jQuery sur le côté serveur de nœud , qui vous permet d'analyser un texte html et traverse c'est exactement comme avec jQuery. J'ai besoin d'obtenir le texte brut du corps html, mais pas seulement cela, j'ai besoin d'obtenir l'élément et le numéro correspondant. IE: si le texte brut a été trouvé dans le troisième élément de paragraphe, j'aurais quelque chose comme:DOM traversal avec cheerio - Comment obtenir tous les éléments avec leur texte correspondant
{
text: <element plaintext>,
element: "p-3"
}
J'ai actuellement la fonction suivante qui tente de le faire:
var plaintext_elements = traverse_tree($('body'));
function traverse_tree(root, found_elements = {}, return_array = []) {
if (root.children().length) {
//root has children, call traverse_tree on that subtree
traverse_tree(root.children().first(), found_elements, return_array);
}
root.nextAll().each(function(i, elem) {
if ($(elem).children().length) {
//if the element has children call traverse_tree on the element's first child
traverse_tree($(elem).children().first(), found_elements, return_array)
}
else {
if (!found_elements[$(elem)[0].name]) {
found_elements[$(elem)[0].name] = 1;
}
else {
found_elements[$(elem)[0].name]++
}
if ($(elem).text() && $(elem).text != '') {
return_array.push({
text: $(elem).text(),
element: $(elem)[0].name + '-' + found_elements[$(elem)[0].name]
})
}
}
})
if (root[0].name == 'body') {
return return_array;
}
}
Est-ce que je vais en la bonne direction, devrais-je essayer autre chose? Toute aide à ce sujet serait appréciée. Encore une fois c'est pas jQuery, mais Cheerio sur le côté serveur. (Ils sont très similaires, cependant)
À partir de votre code actuel, il semble que vous êtes heureux d'ignorer les éléments qui ont enfants et texte? Comme le 'dt' dans'
text
dtouais, c'est l'un des problèmes que j'ai rencontrés. Je ne sais pas comment gérer ce cas sans avoir une tonne de doublons, comme dire '