jQuery each()和casperjs?

时间:2014-01-02 12:24:23

标签: jquery casperjs

我希望回显与我的选择器匹配的所有元素的id,但我对两个不同的'this'感到困惑。

要向casper回应一些东西我使用this.echo() 但是当我使用.each()时,请参考循环中的当前元素。 所以这不起作用

$('.market_listing_row').each(function(i){ this.echo( $( this ).attr('id') ) } )

,也没有

 $('.market_listing_row').each(function(i){ casper.echo( $( this ).attr('id') ) } )

由于没有输出错误,因此casper似乎没有收到.echo()的命令。 我该如何处理这个this.

更多背景信息:

...
casper.waitForSelector('#result_0', function() {
            this.click('#result_0');
});
casper.then(function() {


        var listing = [];

        $('.market_listing_row').each(function(i){ listing.push({id: $( this ).attr('id') }) } )

        for (var i=0; i<listing.length; i++){
            for( var k in listing[i]){
                this.echo(k + ': ' + listing[i].k);
            }
            this.echo('\n');
        }
});
casper.run();

我有一组各种商品的div行,并希望为每个商品制作一个js对象数组:[{id: id, price: price}]

现在我只想提取ID。

1 个答案:

答案 0 :(得分:0)

检查此示例:

var links = [];
var casper = require('casper').create();

function getLinks() {
    var links = document.querySelectorAll('h3.r a');
    return Array.prototype.map.call(links, function(e) {
        return e.getAttribute('href');
    });
}

casper.start('http://google.fr/', function() {
    // search for 'casperjs' from google form
    this.fill('form[action="/search"]', { q: 'casperjs' }, true);
});

casper.then(function() {
    // aggregate results for the 'casperjs' search
    links = this.evaluate(getLinks);
    // now search for 'phantomjs' by filling the form again
    this.fill('form[action="/search"]', { q: 'phantomjs' }, true);
});

casper.then(function() {
    // aggregate results for the 'phantomjs' search
    links = links.concat(this.evaluate(getLinks));
});

casper.run(function() {
    // echo results in some pretty fashion
    this.echo(links.length + ' links found:');
    this.echo(' - ' + links.join('\n - ')).exit();
});