如何匹配所有元素并在页面中获取其内容?

时间:2014-10-20 00:04:21

标签: javascript arrays casperjs

我有一个这样的页面:

<ul id="a">
  <li class="b">
    <a>Content1</a>
  </li>
  <li class="b">
    <a>Content2</a>
  </li>
  <li class="b">
    <a>Content3</a>
  </li>
  ...
</ul>

我尝试了几种方法,但是我没有找到解决方案来获取所需的所有内容。

以我的例子,我想得到:

array[0] = Content0

array[1] = Content1

array[2] = Content2

我试过:casper.getHTML,但它返回第一个匹配的元素,我不明白为什么?以我的示例为例:this.getHTML("ul#a li.b a")仅返回"Content 1"

1 个答案:

答案 0 :(得分:1)

您需要使用为多个元素返回结果的函数。 getHTML返回一个字符串,因此只返回一个结果。一个例子是getElementsInfo函数。注意元素中的s。它公开了text属性,您可以使用它来获取预期的数组:

var array = casper.getElementsInfo("ul#a li.b a").map(function(a){
    return a.text;
});

如果您没有找到这样的功能,那么您可以在页面上下文中做同样的事情:

var array = casper.evaluate(function(){
    return [].map.call(document.querySelectorAll("ul#a li.b a"), function(a){
        return a.innerHTML;
    });
});