如何使用Cheerio加载并操作字符串中的HTML片段?
解决Cheerio加载HTML片段直接访问目标节点的问题
直接给你两种无需依赖选择器定位head/body的方法,能直接获取目标元素并调用Cheerio的方法:
方法1:使用cheerio.parseHTML解析片段
parseHTML会直接将HTML字符串解析为DOM节点数组,转成Cheerio对象后就能直接操作:
const cheerio = require('cheerio'); // 处理div片段 var htmlString = '<div class="artist"><i class="user blue circle icon"></i> Skyy</div>'; const divNodes = cheerio.parseHTML(htmlString); const $div = $(divNodes); console.log($div.text().trim()); // 输出:Skyy console.log($div.attr('class')); // 输出:artist // 处理meta片段 var metaString = '<meta name="description" content="My description">'; const metaNodes = cheerio.parseHTML(metaString); const $meta = $(metaNodes); console.log($meta.attr('content')); // 输出:My description
方法2:加载时禁用自动包裹完整文档
通过cheerio.load的配置项,阻止Cheerio把片段包装成<html><head><body>结构,直接以片段形式加载:
const cheerio = require('cheerio'); // 处理div片段 var htmlString = '<div class="artist"><i class="user blue circle icon"></i> Skyy</div>'; const $ = cheerio.load(htmlString, { isDocument: false }); console.log($.root().text().trim()); // 输出:Skyy console.log($.root().attr('class')); // 输出:artist // 处理meta片段 var metaString = '<meta name="description" content="My description">'; const $metaDoc = cheerio.load(metaString, { isDocument: false }); console.log($metaDoc.root().attr('content')); // 输出:My description
这两种方法都不用写$('body').children()这类依赖结构的选择器,直接拿到目标元素后就能调用.text()、.attr()等方法。
内容的提问来源于stack exchange,提问作者gordie
相关产品推荐
相关产品推荐

