2017-10-22 3 views
1

私はウェブサイトにリクエストし、HTMLを取得してcheerioに渡したいと思う。クラス".thumb"のすべての要素のすべての"href"属性を取得する必要があります。私はコンソール上で結果を表示しています。私は何度も定義されていません。見つかった要素ごとに仮定します。私はタグや識別子で他の要素をループしようとすると定義されませんが、ループしないで最初のものを取得すれば正しい値が与えられます。要素に.each()を呼び出すときCheerioは未定義を返す

function firstReq(){ 
    req(url, (err,res,html)=>{ 
     if(err){console.error(err);} 
     var $ = cheerio.load(html); 
     var arr = [] 
     $("a").each(()=>{ 
     console.log($(this).attr("href")); 
     }); 
    }); 
    } 

私はconsole.log(html)を試してみました。私はまた、"request""cheerio"ファイルをロードする時間を与えるために、おそらくsetTimeoutを反復で設定しようとしました。私は最初にurlからhtmlファイルをダウンロードして(機能の外、呼び出しの前に)自分のコンピュータに転送してからcheerioに渡しましたが、まだ定義されていません。

これはNodeとの私の最初の個人的なプロジェクトです。私は非常に混乱しています。どんな助けもありがとうございます。

アロー機能

function firstReq(){ 
    req(url, (err,res,html)=>{ 
    if(err){console.error(err);} 
    var $ = cheerio.load(html); 
    var arr = [] 
    $("a").each((i , elem)=>{ 
     console.log($(elem).attr("href")); 
    }); 
    }); 
} 

または関数:

+1

私はこの問題は、矢印関数内 'this'を使用していると信じています。キーワード関数に切り替えるか、関数に引数$( "a")を受け入れるようにします。それぞれ(要素=> {console.log($(element).attr( "href"))}) ' – Sidney

+0

@Sidney、矢印関数を使いたい場合は、 '.each((i、elem)=> {...})'を使うことができます。その場合は 'elem === this'となります。 – PitaJ

+0

@シドニー - 答えを投稿してみませんか? – jfriend00

答えて

0

Uは、2つの方法hereを使用することができます

function firstReq(){ 
    req(url, (err,res,html)=>{ 
    if(err){console.error(err);} 
    var $ = cheerio.load(html); 
    var arr = [] 
    $("a").each(function(){ 
     console.log($(this).attr("href")); 
    }); 
    }); 
} 
0
request(url, (err,res,html)=>{ 
     if(err){console.error(err);} 
     var $ = cheerio.load(html); 
     var arr = [] 
     $("a").each((index,a)=>{ 
     console.log($(a).attr("href")); 
     }); 
    }); 
関連する問題