JSDOM получить текст без изображения

Я пытаюсь использовать JSDOM, чтобы получить описание из статьи. HTML-код статьи

<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>

Вот мой код nodejs для получения описания из содержимого. Кажется, он получит текст из первого тега p и выведет пустую строку. Поэтому я просто хочу получить контент в теге p, который не содержит изображения. Кто-нибудь поможет мне в этом вопросе?

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

1 ответ

Решение

В идеале вы могли бы протестировать с Node.TEXT_NODE, но по какой-то причине это вызывает ошибку для меня на nodejs (используя gulp только для целей тестирования):

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;
})

Так что ключ это тест

el.firstElementChild.nodeName !== "IMG"

если вы знаете, что за тегом p следует тег img или текст. В вашем случае firstElementChild.nodeName, который вы хотите, на самом деле является тегом br, но я предполагаю, что он не всегда присутствует в конце текста.

Вы также можете проверить пустую строку ala:

  if (el.textContent.trim() !== "") {}  // you may want to trim() that for spaces
Другие вопросы по тегам