2013-04-30 430 views
4

在过去的几个小时里,我一直试图查询DOM元素并将它们存储在一个包含CasperJS的数组中,所以之后我可以遍历它们并触发单击事件。使用CasperJS在一个数组中存储多个DOM元素

比方说,我的标记是这样的:

<ul> 
    <li>One</li> 
    <li>Two</li> 
    <li>Three</li> 
</ul> 

现在,我想存储每个<li>一个数组,然后遍历,火Click事件,然后采取捕获。

这是我试过的事情之一:

var listItems = []; 

casper.start(); 

casper.open(urlHere, function() { 
    listItems.push(this.evaluate(function() { 
     return document.querySelectorAll('ul > li'); 
    })); 

    this.echo(listItems); 
}); 

它返回[ , , , ]这基本上意味着他们都是null

有人能指引我在正确的方向吗?

谢谢!

回答

1

我对CasperJS一无所知,但是一个数组被认为是JavaScript中的一个对象,所以数组会有一种Object类型。你是否尝试过使用for循环来循环?

var i; 
for(i=0;i<listItems.length;i++) { 
    var item = listItems[i]; 
} 

或者,如果您拥有一个包含列表项的实际对象的对象,你可以做到以下几点:

for(i in listItems) { 
    if(listItems.hasOwnProperty(i)) { 
     var item = listItems[i]; 
    } 
} 

编辑:这是只是为了检查你实际有包含您的项目一个有效的数组。

+0

嘿乔恩,我已经尝试了两个选项,但它返回的是'null'。这现在变得无聊......无论如何感谢 – peduarte 2013-04-30 13:34:29

10

试试这个:

var listItems = []; 

casper.start(urlHere, function() { 
    listItems = this.evaluate(function() { 
     var nodes = document.querySelectorAll('ul > li'); 
     return [].map.call(nodes, function(node) { 
      return node.textContent; 
     }); 
    }); 

    this.echo(listItems); 
});  

基本上,你不能返回其不可序列this.evaluate()值,它是相当的文档well explained

+0

我如何更深入地抓住LI内部的内容 – CodeGuru 2016-01-12 05:50:46

相关问题