2017-09-29 7 views
0

J'essaie d'utiliser jsdom pour obtenir une description d'un article. Le code html de l'article estjsdom obtenir du texte sans image

<p><img src="http://localhost/bibi_cms/cms/app/images/upload_photo/1506653694941.png" 
style="width: 599.783px; height: 1066px;"></p> 
<p>testestestestestestestest<br></p> 

Voici mon code nodejs pour obtenir la description du contenu, il semble qu'il va obtenir le texte de la première balise p et imprimer une chaîne vide. Donc, je veux juste obtenir le contenu en p tag qui ne contient aucune image. Quelqu'un m'aider sur cette question?

const dom = new JSDOM(results[i].content.toString()); 
if (dom.window.document.querySelector("p") !== null) 
results[i].description = dom.window.document.querySelector("p").textContent; 

Répondre

1

Idéalement, vous pouvez tester contre Node.TEXT_NODE mais qui est erroring pour moi sur nodejs pour une raison quelconque si (en utilisant gulp seulement à des fins de test):

const gulp = require("gulp"); 
const fs = require('fs'); 

const jsdom = require("jsdom"); 
const { JSDOM } = jsdom; 

const html = yourHTML.html'; 

gulp.task('default', ['getText']); 

gulp.task('getText', function() { 

    var dirty; 
    dirty = fs.readFileSync(html, 'utf8'); 

    const dom = new JSDOM(dirty); 
    const pList = dom.window.document.querySelectorAll("p"); 

    pList.forEach(function (el, index, list) { 

    console.log("p.firstElementChild.nodeName : " + el.firstElementChild.nodeName); 

    if (el.firstElementChild.nodeName !== "IMG") { 
     console.log(el.textContent); 
    } 
}); 

return; 
}) 

La clé est donc le test

el.firstElementChild.nodeName !== "IMG" 

si vous savez qu'une balise img ou un texte suit la balise p. Dans votre cas, le firstElementChild.nodeName que vous voulez est en fait une balise br mais je suppose que ce n'est pas toujours là à la fin du texte.

Vous pouvez également tester contre une chaîne vide ala:

if (el.textContent.trim() !== "") {} // you may want to trim() that for spaces