NodeJS本身不提供许多浏览器功能,例如DOM操作或XHR,因为这不是访问DOM的典型服务器任务-您必须使用外部库来执行此操作。
DOM的能力在很大程度上取决于库,以下是您可以使用的主要工具的快速比较:
jsdom
:实现DOM级别4,这是最新的DOM标准,因此您可以在现代浏览器中执行的所有操作都可以在jsdom
:
const jsdom = require("jsdom"); const dom = new jsdom.JSDOM(`<!DOCTYPE html><p>Hello world</p>`); dom.window.document.querySelector("p").textContent; // 'Hello world'htmlparser2
:相同,但以更复杂的API为代价,具有增强的性能和灵活性:
const htmlparser = require("htmlparser2"); const parser = new htmlparser.Parser({ onopentag: (name, attrib) => { if (name=='p') console.log('a paragraph element is opening'); } }, {depreEntities: true}); parser.write(`<!DOCTYPE html><p>Hello world</p>`); parser.end(); // console output: 'a paragraph element is opening'cheerio
:基于HTML DOM解析的jQuery实现htmlparser2
:
const cheerio = require('cheerio'); const $ = cheerio.load(`<!DOCTYPE html><p>Hello world</p>`); $('p').text('Bye moon'); $.html(); // '<!DOCTYPE html><p>Bye moon</p>'xmldom
:完全实现DOM级别2,部分实现DOM级别3。与HTML以及XML一起使用dom-parser
:基于正则表达式的DOM解析器,它实现了一些DOM方法,例如getElementById
。由于用正则表达式解析HTML是一个非常糟糕的主意,因此我不建议将其用于生产。



