Search code examples
node.jsjquery-selectorscheerio

jquery / cheerio: how to select multiple elements?


I need to parse some markup similar to this one, from an html page:

<a href="#">
  <i class="icon-location"></i>London
</a>

I need to get London.

I did try something like (using cheerio):

$('a', 'i[class="icon-location"]').text();

or

$('a > i[class="icon-location"]').text();

without success...

I'd like to avoid methods like next(), since the expression should be passed to a method which just extracts the text from the selector.

What expression should I use (if it's feasible) ?


Solution

  • There's a solution, which is pretty unusual, but it works :

    $("#foo")
        .clone()    //clone the element
        .children() //select all the children
        .remove()   //remove all the children
        .end()  //again go back to selected element
        .text();
    

    Demo : https://jsfiddle.net/2r19xvep/

    Or, you could surround your value by a new tag so you just select it:

    <i class="icon-location"></i><span class="whatever">London</span>
    

    Then

    $('.whatever').text();