phantomjs中不能使用forEach吗?

page.evaluate(function () {
            var dataList = [];
            var containers=document.querySelectorAll('.c-container');
            containers.forEach(function (val) {
                console.log(val);
            })

然后就报错。在控制台输入,或者用for就可以。是什么原因呢

报错信息

TypeError: undefined is not a constructor (evaluating 'containers.forEach(function (val) {
                console.log(val);
            })')
阅读 4.6k
4 个回答

containers 是一个伪数组,可以通过 Array.from(containers) 转为真正的数组再使用 forEach 方法

page.evaluate(function () {
    var dataList = [];
    var containers=document.querySelectorAll('.c-container');
    containers.forEach(function (val) {
        console.log(val);
    })
});//会不会是漏了本行   
var containers=document.querySelectorAll('.c-container');
得到的是一个Nodelist类数组对象,Array.prototype.forEach是定义再数组上的方法,所以直接用是不行的
[].slice.call(contaners).forEach()//可以这样写

另一个选择是用jQuery的$(selector).each().

可以用PhantomJS中的includeJs来引入jQuery:传送门

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题