TypeError:$ .find不是一个函数

时间:2019-03-13 13:12:56

标签: javascript html node.js express cheerio

我正在从页面提取数据,但是出现此错误

  

TypeError:$ .find不是函数`

我已经安装了cheerio。当我输入trm = $.find(".item-row[data-item='TRM']").find(".item-value > span");时,错误就出来了,我得到了数据,但这个错误就出来了。

代码:

const express = require("express");
const app = express();
const https = require('https');
const cheerio = require('cheerio');

app.get('/', function(req, res) {
  res.send('express test');
});

https.get('https://widgetsdataifx.blob.core.windows.net/semana/semanaindicators', (resp) => {
  let data = '';

  resp.on('data', (chunk) => {
    data += chunk;
  });

  resp.on('end', () => {
    var $ = cheerio.load(data);
    trm = $.find(".item-row[data-item='TRM']").find(".item-value > span");
  });

}).on("error", (err) => {
  console.log("Error: " + err.message);
});

2 个答案:

答案 0 :(得分:1)

没有$.find()函数,就像jQuery中没有函数一样。 jQuery对象上有一个.find() 方法,但这不是$所代表的。

trm = $(".item-row[data-item='TRM']").find(".item-value > span");

搜索为“ item-row”元素加载的标记,然后从每个元素中搜索“ item-value”元素内的<span>个元素。

与“真实” jQuery中一样,$对象是一个函数。您可以对其进行函数调用,并传递希望Cheerio在已加载的HTML标记中找到的选择器。

edit -这是一个有效的测试。如果您npm install cheerio,可以使用Node:

var cheerio = require("cheerio");

var $ = cheerio.load(`<body>
  <div class=item-row data-item=TRM>
    <div class=item-value>
      <span>THIS IS THE CONTENT</span>
    </div>
  </div>
</body>`);


var span = $(".item-row[data-item='TRM']").find(".item-value > span");
console.log(span.text());

答案 1 :(得分:0)

在播放代码时,看起来var $ = cheerio.load( data )表达式将$变量分配给已加载HTML文档的cheerio实例。然后,您可以像使用jQuery一样遍历dom。

将第20行更改为

$("body").find(".item-row[data-item='TRM']").find(".item-value > span");

之所以会起作用,是因为我们正在选择body,然后在原始查询的返回值而不是cheerio本身的实例上调用find方法。

相关问题