2015-12-12 66 views
0

我正在創建一個casperjs腳本來解析網頁中的數據。我正在使用jQuery以及casperjsjQuery返回正確數量的元素,但只有第一個是對象

我遇到的問題是,當我嘗試循環遍歷article元素時,除第一個元素外,其他元素都是null。腳本報告頁面上正確的元素數量。

我的代碼如下(我已經刪除了部分腳本,因爲它不是必需的)。

var articles = null; 

/* 
* Parse all article elements 
*/ 
casper.then(function() { 

    console.log('Parsing articles from feed ...'); 

    articles = this.evaluate(function() { 
     return $('article'); 
    }); 

    console.log(typeof(articles)); // prints 'object' 

    // Prints 56 
    console.log(articles.length); 

}); 

/* 
* Parse data from article elements 
*/ 
casper.then(function() { 
    for(i=0; i<=articles.length; i++) 
    { 
     console.log(articles[i]); 
    } 
}); 

當我運行該腳本,我從for環以下幾點:

[object Object] 
null 
null 
null 
null 
null 
null 
... 

任何想法,爲什麼發生這種情況?

+0

可能重複[爲什麼this.evaluate不正確返回DOM節點?](http://stackoverflow.com/questions/26353431/why-doesnt-this-evaluate-return-dom-nodes-correctly ) –

回答

0

返回的jQuery集合,在這種情況下爲$('article'),是而不是的數組。你需要使用.each()函數遍歷它。 請注意,這與$ .each()函數不一樣。

有關如何遍歷jQuery集合的更多信息,請參閱this article

閱讀上的jQuery object本身:

當創建新元素(或選擇現有的),jQuery的返回一個集合中的元素。很多剛接觸jQuery的開發人員都假設這個集合是一個數組。畢竟,它有一個零元素的DOM元素序列,一些熟悉的數組函數和一個.length屬性。實際上,jQuery對象比這更復雜。

+0

我用'console.log(articles.get(i));'和'console.log(articles.eq(i));'替換了'for'循環中的代碼。循環甚至不會觸發。 – BugHunterUK

+1

OP正在使用'length'屬性並嘗試通過索引訪問項目。這兩個都由jQuery集合支持。不需要使用'.each()'。 DOM節點全部爲空的原因是因爲它們無法從PhantomJS/CasperJS中的頁面上下文傳遞(請參閱我對該問題的重複評論)。 –

+0

@ ArtjomB。你是對的。這是否在文檔中?我沒有看到它。 – BugHunterUK

相關問題