I am trying to parse a HTML table containing multiple cells with the following structure:

```html
<td id="topic1234">
    <a name='1234'></a>
    <b><a href='/url'>Title</a><b>
    <span class='s'>Details</span>
</td>
<td id="topic2345">
    <a name='2345'></a>
    <b><a href='/url'>Title</a><b>
    <span class='s'>Details</span>
</td>
...

```

The 'id' attribute, 'a' element with a 'href' attribute, and 'span' element are the important details, and the two elements are directly nested.
I tried using

```
select("[id^=topic]"
          + ":has(> b > a[href])"
          + ":has(> span.s)")

```

but the resulting list is empty. It works when I change it to:

```
select("td[id^=topic]"
          + ":has(td > b > a[href])"
          + ":has(td > span.s)")

```

but I don't want the selector to depend on the fact that the root element is a 'td', and judging by the documentation, the former should also work. The following didn't work either:

```
select("[id^=topic]"
          + ":has(:root > b > a[href])"
          + ":has(:root > span.s)")

```

Am I doing something wrong here? Using Jsoup 1.8.3 by the way.