2013-10-04 141 views
0

我是casperjs的新手,我遇到了evaluate()函数的问题。casperJS评估和jQuery方法

的HTML代码(我现在不能更改)

<table> 
    <tr> 
    <td>Price</td> 
    <td>some other field</td> 
    <td>blah</td> 
    <td>foo</td> 
    </tr> 
    <tr> 
    <td>125.3</td> 
    <td>some other value</td> 
    <td>something else</td> 
</table> 

的目标是开始从这些表刮信息,得到了第一个TD的每一行,后来做与他们的东西。我遇到的问题是“每个”功能没有做任何事情。

我试过它也只是返回tr到一个变量,做一个$ .each()就可以了,但它也不起作用。每个()在评估中都不可用吗? (我是在评估你有大部分的jQuery方法的印象)

var evaluatedItems = this.evaluate(function() { 
     var items = [];   
     $("td").filter(function() { return $.text([this]) == 'Price'; }).closest('table').find('tr').each(function() { 
      var col = $(this).find('td:first'); 
      require('utils').dump(col); 
      items.push(col); 
     }); 
     return items; 
    }); 
+0

如果jQuery是的DOM上下文中加载这只作品。 – mike

+0

我该怎么做?谢谢。 (如果你发布了答案,我可以将其标记为已回答)编辑:我在他们的网站上发现了这个:casper.page.injectJs('/ path/to/jquery.js');这是你的建议吗? – matt

+0

我试过了,它仍然没有工作....有没有人有任何建议,使用我的功能(this.evaluate(function(){... – matt

回答

0

阅读的评论后,我意识到,我在做什么在jQuery库的URL是把这是不允许的。

一旦我把实际的目录位置,它的工作。把它放在casper的实例中比较容易。

var casper = require("casper").create({ 
    verbose: true, 
    logLevel: 'error',  
    clientScripts: ["<location of directory containing jquery>/jquery-1.7.2.min.js"] 
}); 

但另一种选择是使用:

page.casperInsertJs("<location of directory containing jquery>/jquery-1.7.2.min.js");