jsdom获取没有图片的文字
jsdom get text without image
我正在尝试使用 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;
理想情况下,您可以针对 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"
如果您知道 img 标签或文本跟在 p 标签之后。在你的情况下,你想要的 firstElementChild.nodeName 实际上是一个 br 标签,但我认为它不一定总是在文本的末尾。
您还可以针对空字符串 ala 进行测试:
if (el.textContent.trim() !== "") {} // you may want to trim() that for spaces
我正在尝试使用 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;
理想情况下,您可以针对 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"
如果您知道 img 标签或文本跟在 p 标签之后。在你的情况下,你想要的 firstElementChild.nodeName 实际上是一个 br 标签,但我认为它不一定总是在文本的末尾。
您还可以针对空字符串 ala 进行测试:
if (el.textContent.trim() !== "") {} // you may want to trim() that for spaces