我正在使用casper.evaluate()从页面中获取数据数组。但是它似乎无法返回一个数组(而返回的字符串完美无缺)。可能是什么问题?
澄清:评估中的代码是:
function(){
return $('#id a').map(function(i, e) {
return $(e).attr('href');
}).get();
}
调用结束时的.get()
意味着获取数组而不是jQuery对象。顺便说一下,我确信页面上有jQuery。
答案 0 :(得分:3)
你不需要jQuery:
casper.evaluate(function() {
return [].map.call(__utils__.findAll('#id a'), function(node) {
return node.getAttribute('href');
});
});
答案 1 :(得分: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/>");
}
答案 2 :(得分:0)
.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()
在这种情况下似乎更合适更清晰。)
有关两者的比较,请参阅this S.O. answer。