3

我正在使用 casper.evaluate() 从页面中获取数据数组。然而,它似乎无法返回一个数组(而返回的字符串可以完美地工作)。可能是什么问题?

为了澄清:评估中的代码是:

function(){ 
    return $('#id a').map(function(i, e) { 
        return $(e).attr('href'); 
    }).get(); 
}

.get()调用结束时的意思是获取一个数组而不是一个 jQuery 对象。顺便说一句,我确定页面中提供了 jQuery。

4

3 回答 3

3

你在这里不需要 jQuery:

casper.evaluate(function() {
    return [].map.call(__utils__.findAll('#id a'), function(node) {
        return node.getAttribute('href');
    });
});
于 2013-02-20T23:33:12.483 回答
0

我相信 .get() 是不必要的。

没有 .get() 的返回确实形成了一个非常好的数组,看看这个 jsfiddle 示例 http://jsfiddle.net/YFsRw/

r = function(){ 
    return $('#id a').map(function(i, e) { 
        return $(e).attr('href'); 
    }); 
}

var p = r();

// p servers as a nice array :)
for (i = 0; i < p.length; i++) {
    document.write(p[i] + "<br/>");
}
于 2013-02-20T23:39:58.603 回答
0

.toArray()是您正在寻找的。

.toArray() [返回:数组]

描述:检索包含在 jQuery 集中的所有元素,作为一个数组。

function(){ 
    return $('#id a').map(function(i, e) { 
        return $(e).attr('href'); 
    }).toArray(); 
}

或者,还有$.makeArray(),它在更广泛的层面上工作,不仅仅是jQuery 元素集,并且以静态方式调用。

function(){ 
    return $.makeArray(
        $('#id a').map(function(i, e) { 
            return $(e).attr('href'); 
        })
    ); 
}

(但.toArray()在这种情况下似乎更合适和更清晰。)


有关两者的比较,请参阅此 SO 答案

于 2015-03-13T07:28:37.267 回答