2013-04-30 110 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

相關問題