Simple Selectors
The table below shows all supported simple selectors. These can be combined in any order. |
Pattern |
Matches |
Example |
* |
Any element |
* |
tag |
Elements with the given tag name |
div |
ns|E |
Elements of type E in the namespace ns |
fb|name finds elements |
#id |
Elements with attribute ID of “id” |
div#wrap, #logo |
.class |
Elements with a class name of “class” |
div.left, .result |
[attr] |
Elements with an attribute named “attr” (with any value) |
a[href], [title] |
[^attrPrefix] |
Elements with an attribute name starting with “attrPrefix”. Use to find elements with HTML5 datasets |
[^data-], div[^data-] |
[attr=val] |
Elements with an attribute named “attr”, and value equal to “val” |
img[width=500], a[rel=nofollow] |
[attr=”val”] |
Elements with an attribute named “attr”, and value equal to “val” |
span[hello=”Cleveland”] |
[attr^=valPrefix] |
Elements with an attribute named “attr”, and value starting with “valPrefix” |
a[href^=http:] |
[attr$=valSuffix] |
Elements with an attribute named “attr”, and value ending with “valSuffix” |
img[src$=.png] |
[attr*=valContaining] |
Elements with an attribute named “attr”, and value containing “valContaining” |
a[href*=/search/] |
[attr~=regex] |
Elements with an attribute named “attr”, and value matching the regular expression |
img[src~=(?i)\\.(png|jpe?g)] |
Combinations
|
Pattern |
Matches |
Example |
E F |
An F element descended from an E element |
div a, .logo h1 |
E > F |
An F direct 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 |
All matching elements E, F, or G |
a[href], div, h3 |
Pseudo Selectors
The pseudo selectors from the table below can be combined in any order and with other selectors. |
Pattern |
Matches |
Example |
:lt(n) |
Elements whose sibling index is less than n |
td:lt(3) finds the first 2 cells of each row |
:gt(n) |
Elements whose sibling index is greater than n |
td:gt(1) finds cells after skipping the first two |
:eq(n) |
Elements whose sibling index is equal to n |
td:eq(0) finds the first cell of each row |
:has(selector) |
Elements that contains at least one element matching the selector |
div:has(p) finds divs that contain p elements |
:not(selector) |
Elements that do not match the selector. |
div:not(.logo) finds all divs that do not have the “logo” class.
div:not(:has(div)) finds divs that do not contain divs. |
:contains(text) |
Elements 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(webalert) finds p elements containing the text “webalert”. |
:matches(regex) |
Elements 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. |
:containsOwn(text) |
Elements that directly contain the specified text. The search is case insensitive. The text must appear in the found element, not any of its descendants. |
p:containsOwn(webalert) finds p elements with own text “webalert”. |
:matchesOwn(regex) |
Elements 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. |
Structural pseudo selectors
|
Pattern |
Matches |
Example |
:root |
The element that is the root of the document. In HTML, this is the html element |
:root |
:nth-child(an+b) |
Elements that have an+b-1 siblings before it in the document tree, for any positive integer or zero value of n, and has a parent element. For values of a and b greater than zero, this effectively divides the element’s children into groups of a elements (the last group taking the remainder), and selecting the bth element of each group. For example, this allows the selectors to address every other row in a table, and could be used to alternate the color of paragraph text in a cycle of four. The a and b values must be integers (positive, negative, or zero). The index of the first child of an element is 1.In addition to this, :nth-child() can take odd and even as arguments instead. odd has the same signification as 2n+1, and even has the same signification as 2n. |
tr:nth-child(2n+1) finds every odd row of a table.:nth-child(10n-1) the 9th, 19th, 29th, etc, element.li:nth-child(5) the 5h li |
:nth-last-child(an+b) |
Elements that have an+b-1 siblings after it in the document tree. Otherwise like :nth-child() |
tr:nth-last-child(-n+2) the last two rows of a table |
:nth-of-type(an+b) |
Pseudo-class notation represents an element that has an+b-1 siblings with the same expanded element name before it in the document tree, for any zero or positive integer value of n, and has a parent element |
img:nth-of-type(2n+1) |
:nth-last-of-type(an+b) |
Pseudo-class notation represents an element that has an+b-1 siblings with the same expanded element name after it in the document tree, for any zero or positive integer value of n, and has a parent element |
img:nth-last-of-type(2n+1) |
:first-child |
Elements that are the first child of some other element. |
div > p:first-child |
:last-child |
Elements that are the last child of some other element. |
ol > li:last-child |
:first-of-type |
Elements that are the first sibling of its type in the list of children of its parent element |
dl dt:first-of-type |
:last-of-type |
Elements that are the last sibling of its type in the list of children of its parent element |
tr > td:last-of-type |
:only-child |
Elements that have a parent element and whose parent element hasve no other element children |
|
:only-of-type |
An element that has a parent element and whose parent element has no other element children with the same expanded element name |
|
:empty |
Elements that have no children at all |
|