2014-10-20 3 views
0

У меня есть страница, как это:Как сопоставить все элементы и получить их содержимое на странице?

<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

Вам нужно использовать функции, которые возвращают результаты для нескольких элементов. 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; 
    }); 
}); 
+0

Thx =) casper.evaluate возвращает null, но работает casper.getElementsInfo. Я верю ваш ответ, но можете ли вы сказать мне, почему оценка возвращает null? (Я использовал тот же селектор). Я спрашиваю, потому что прежде чем я попытался несколько способов с функцией оценки, но я не смог это сделать. – user2137454

+0

Я изменил с 'innerText' на' innerHTML' –