Pattern | Matches | Example |
* | any element | * |
E | an element of type E | h1 |
ns|E | an element of type E in the namespace ns | fb|name finds <fb:name> elements |
E#id | an Element with attribute ID of "id" | div#wrap , #logo |
E.class | an Element with a class name of "class" | div.left , .result |
E[attr] | an Element with the attribute named "attr" | a[href] , [title] |
E[^attrPrefix] | an Element with an attribute name starting with "attrPrefix". Use to find elements with HTML5 datasets | [^data-] , div[^data-] |
E[attr=val] | an Element with the attribute named "attr" and value equal to "val" | img[width=500] , a[rel=nofollow] |
E[attr^=valPrefix] | an Element with the attribute named "attr" and value starting with "valPrefix" | a[href^=http:] |
E[attr$=valSuffix] | an Element with the attribute named "attr" and value ending with "valSuffix" | img[src$=.png] |
E[attr*=valContaining] | an Element with the attribute named "attr" and value containing "valContaining" | a[href*=/search/] |
E[attr~=regex] | an Element with the attribute named "attr" and value matching the regular expression | img[src~=(?i)\\.(png|jpe?g)] |
| The above may be combined in any order | div.header[title] |
| Combinators |
E F | an F element descended from an E element | div a , .logo h1 |
E > F | an F child of E | ol > li |
E + F | an F element immediately preceded by sibling E | li + li , div.head + div |
E ~ F | an F element preceded by sibling E | h1 ~ p |
E, F, G | any matching element E, F, or G | a[href], div, h3 |
| Pseudo selectors |
E:lt(n) | an Element whose sibling index is less than n | td:lt(3) finds the first 2 cells of each row |
E:gt(n) | an Element whose sibling index is greater than n | td:gt(1) finds cells after skipping the first two |
E:eq(n) | an Element whose sibling index is equal to n | td:eq(0) finds the first cell of each row |
E:has(selector) | an Element that contains at least one element matching the selector | div:has(p) finds divs that contain p elements |
E:contains(text) | an Element that contains the specified text. The search is case insensitive. The text may appear in the found Element, or any of its descendants. | p:contains(jsoup) finds p elements containing the text "jsoup". |
E:matches(regex) | an Element whose text matches the specified regular expression. The text may appear in the found Element, or any of its descendants. | td:matches(\\d+) finds table cells containing digits. div:matches((?i)login) finds divs containing the text, case insensitively. |
E:containsOwn(text) | an Element that directly contains the specified text. The search is case insensitive. The text must appear in the found Element, not any of its descendants. | p:containsOwn(jsoup) finds p elements with own text "jsoup". |
E:matchesOwn(regex) | an Element whose own text matches the specified regular expression. The text must appear in the found Element, not any of its descendants. | td:matchesOwn(\\d+) finds table cells directly containing digits. div:matchesOwn((?i)login) finds divs containing the text, case insensitively. |