我正在使用Cheerio解析一个简单的网页,并且在可能的情况下徘徊:
使用此结构的html:
<tr class="human">
<td class="event"><a>event1</a></td>
<td class="name">name1</td>
<td class="surname"><a>surname1</a></td>
<td class="date">2011</td>
</tr>
<tr class="human">
<td class="event"><a>event2</a></td>
<td class="name">name2</td>
<td class="surname"><a>surname2</a></td>
<td class="date">2012</td>
</tr>
<tr class="human">
<td class="event"><a>event3</a></td>
<td class="name">name3</td>
<td class="surname"><a>surname3</a></td>
<td class="date">2013</td>
</tr>
一旦我获得了所有与
tr.human
选择器匹配的cheerio对象,我就希望能够遍历它们,以将name
,surname
等类中的值映射到一个对象。到目前为止,我实现了这一点:
var cheerio = require('cheerio');
var fs = require('fs')
fs.readFile('./humans.html', 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
const $ = cheerio.load(data)
var results = $('tr.human')
results.each(function(i, result){
var date = result.children[3]
var name = result.children[1]
var surname = result.children[2]
var object = {"name":name,"date":date,"surname":surname}
})
});
但是我想摆脱对
children
中的index的调用,相反,我想通过选择器来过滤result
,如下所示:var date = result.children('td.date')
但以上结果导致以下错误:
var date = result.children('td.date')
^
TypeError: result.children is not a function
我是Node和cheerio的新手,请阅读Cheerio文档,但我对此非常满意。如何使用选择器获取某些类下的值?
我必须承认,我想要首先循环遍历元素,并在每个迭代映射内部映射到对象,不匹配选择器,然后循环,因为这可能无法保证匹配结果中元素的正确顺序(此处的循环和过滤器不可互换) ,或者呢?
最佳答案
result
是一个裸元素,没有包装在cheerio中。与jQuery类似,您可能希望再次将其包装在$()
中
var date = $(result).children('td.date');
关于javascript - 如何使用选择器过滤 `each`中的cheerio对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43381891/