- JavaScript querySelector
- Introduction to JavaScript querySelector() and querySelectorAll() methods
- Basic selectors
- 1) Universal selector
- 2) Type selector
- 3) Class selector
- 4) ID Selector
- 5) Attribute selector
- Grouping selectors
- Combinators
- 1) descendant combinator
- 2) Child combinator
- 3) General sibling combinator
- 4) Adjacent sibling combinator
- Pseudo
- 1) Pseudo-classes
- 2) Pseudo-elements
- Summary
- Document: querySelector() method
- Syntax
- Parameters
- Return value
- Exceptions
- Usage notes
- Escaping special characters
- Examples
- Finding the first element matching a class
- Complex selectors
- Negation
- Specifications
- Browser compatibility
- See also
- Found a content problem with this page?
- MDN
- Support
- Our communities
- Developers
JavaScript querySelector
Summary: in this tutorial, you will learn how to use the JavaScript querySelector() and querySelectorAll() to find elements based on CSS selectors.
Introduction to JavaScript querySelector() and querySelectorAll() methods
The querySelector() is a method of the Element interface. The querySelector() method allows you to select the first element that matches one or more CSS selectors.
The following illustrates the syntax of the querySelector() method:
let element = parentNode.querySelector(selector);
Code language: JavaScript (javascript)
In this syntax, the selector is a CSS selector or a group of CSS selectors to match the descendant elements of the parentNode .
If the selector is not valid CSS syntax, the method will raise a SyntaxError exception.
If no element matches the CSS selectors, the querySelector() returns null .
The querySelector() method is available on the document object or any Element object.
Besides the querySelector() , you can use the querySelectorAll() method to select all elements that match a CSS selector or a group of CSS selectors:
let elementList = parentNode.querySelectorAll(selector);
Code language: JavaScript (javascript)
The querySelectorAll() method returns a static NodeList of elements that match the CSS selector. If no element matches, it returns an empty NodeList .
Note that the NodeList is an array-like object, not an array object. However, in modern web browsers, you can use the forEach() method or the for. of loop.
To convert the NodeList to an array, you use the Array.from() method like this:
let nodeList = document.querySelectorAll(selector); let elements = Array.from(nodeList);
Code language: JavaScript (javascript)
Basic selectors
Suppose that you have the following HTML document:
html>
html lang="en"> head> title>querySelector() Demo title> head> body> header> div id="logo"> img src="img/logo.jpg" alt="Logo" id="logo"> div> nav class="primary-nav"> ul> li class="menu-item current">a href="#home">Home a> li> li class="menu-item">a href="#services">Services a> li> li class="menu-item">a href="#about">About a> li> li class="menu-item">a href="#contact">Contact a> li> ul> nav> header> main> h1>Welcome to the JS Dev Agency h1> div class="container"> section class="section-a"> h2>UI/UX h2> p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem placeat, atque accusamus voluptas laudantium facilis iure adipisci ab veritatis eos neque culpa id nostrum tempora tempore minima. Adipisci, obcaecati repellat. p> button>Read More button> section> section class="section-b"> h2>PWA Development h2> p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Magni fugiat similique illo nobis quibusdam commodi aspernatur, tempora doloribus quod, consectetur deserunt, facilis natus optio. Iure provident labore nihil in earum. p> button>Read More button> section> section class="section-c"> h2>Mobile App Dev h2> p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Animi eos culpa laudantium consequatur ea! Quibusdam, iure obcaecati. Adipisci deserunt, alias repellat eligendi odit labore! Fugit iste sit laborum debitis eos? p> button>Read More button> section> div> main> script src="js/main.js"> script> body> html>Code language: HTML, XML (xml)
1) Universal selector
The universal selector is denoted by * that matches all elements of any type:
The following example uses the querySelector() selects the first element in the document:
let element = document.querySelector('*');
Code language: JavaScript (javascript)
And this select all elements in the document:
let elements = document.querySelectorAll('*');
Code language: JavaScript (javascript)
2) Type selector
To select elements by node name, you use the type selector e.g., a selects all elements:
The following example finds the first h1 element in the document:
let firstHeading = document.querySelector('h1');
Code language: JavaScript (javascript)
And the following example finds all h2 elements:
let heading2 = document.querySelectorAll('h2');
Code language: JavaScript (javascript)
3) Class selector
To find the element with a given CSS class, you use the class selector syntax:
.className
Code language: CSS (css)
The following example finds the first element with the menu-item class:
let note = document.querySelector('.menu-item');
Code language: JavaScript (javascript)
And the following example finds all elements with the menu class:
let notes = document.querySelectorAll('.menu-item');
Code language: JavaScript (javascript)
4) ID Selector
To select an element based on the value of its id, you use the id selector syntax:
The following example finds the first element with the id #logo :
let logo = document.querySelector('#logo');
Code language: JavaScript (javascript)
Since the id should be unique in the document, the querySelectorAll() is not relevant.
5) Attribute selector
To select all elements that have a given attribute, you use one of the following attribute selector syntaxes:
[attribute] [attribute=value] [attribute~=value] [attribute|=value] [attribute^=value] [attribute$=value] [attribute*$*=value]
Code language: JSON / JSON with Comments (json)
The following example finds the first element with the attribute [autoplay] with any value:
let autoplay = document.querySelector('[autoplay]');
Code language: JavaScript (javascript)
And the following example finds all elements that have [autoplay] attribute with any value:
let autoplays = document.querySelectorAll('[autoplay]');
Code language: JavaScript (javascript)
Grouping selectors
To group multiple selectors, you use the following syntax:
The selector list will match any element with one of the selectors in the group.
The following example finds all and
elements:
let elements = document.querySelectorAll('div, p');
Code language: JavaScript (javascript)
Combinators
1) descendant combinator
To find descendants of a node, you use the space ( ) descendant combinator syntax:
For example p a will match all elements inside the p element:
let links = document.querySelector('p a');
Code language: JavaScript (javascript)
2) Child combinator
The > child combinator finds all elements that are direct children of the first element:
let listItems = document.querySelectorAll('ul > li');
Code language: JavaScript (javascript)
- element with the class nav :
let listItems = document.querySelectorAll('ul.nav > li');
Code language: JavaScript (javascript)
3) General sibling combinator
The ~ combinator selects siblings that share the same parent:
let links = document.querySelectorAll('p ~ a');
Code language: JavaScript (javascript)
4) Adjacent sibling combinator
The + adjacent sibling combinator selects adjacent siblings:
For example, h1 + a matches all elements that directly follow an h1 :
let links = document.querySelectorAll('h1 + a');
Code language: JavaScript (javascript)
let links = document.querySelector('h1 + a');
Code language: JavaScript (javascript)
Pseudo
1) Pseudo-classes
The : pseudo matches elements based on their states:
element:state
Code language: CSS (css)
let listItem = document.querySelectorAll('li:nth-child(2)');
Code language: JavaScript (javascript)
2) Pseudo-elements
The :: represent entities that are not included in the document.
For example, p::first-line matches the first line of all p elements:
let links = document.querySelector('p::first-line');
Code language: JavaScript (javascript)
Summary
- The querySelector() finds the first element that matches a CSS selector or a group of CSS selectors.
- The querySelectorAll() finds all elements that match a CSS selector or a group of CSS selectors.
- A CSS selector defines elements to which a CSS rule applies.
Document: querySelector() method
The Document method querySelector() returns the first Element within the document that matches the specified selector, or group of selectors. If no matches are found, null is returned.
Note: The matching is done using depth-first pre-order traversal of the document’s nodes starting with the first element in the document’s markup and iterating through sequential nodes by order of the number of child nodes.
Syntax
Parameters
A string containing one or more selectors to match. This string must be a valid CSS selector string; if it isn’t, a SyntaxError exception is thrown. See Locating DOM elements using selectors for more about selectors and how to manage them.
Note: Characters that are not part of standard CSS syntax must be escaped using a backslash character. Since JavaScript also uses backslash escaping, be especially careful when writing string literals using these characters. See Escaping special characters for more information.
Return value
An Element object representing the first element in the document that matches the specified set of CSS selectors, or null is returned if there are no matches.
If you need a list of all elements matching the specified selectors, you should use querySelectorAll() instead.
Exceptions
Thrown if the syntax of the specified selectors is invalid.
Usage notes
If the specified selector matches an ID that is incorrectly used more than once in the document, the first element with that ID is returned.
CSS pseudo-elements will never return any elements, as specified in the Selectors API.
Escaping special characters
To match against an ID or selectors that do not follow standard CSS syntax (by using a colon or space inappropriately, for example), you must escape the character with a backslash (» \ «). As the backslash is also an escape character in JavaScript, if you are entering a literal string, you must escape it twice (once for the JavaScript string, and another time for querySelector() ):
div id="foo\bar">div> div id="foo:bar">div> script> console.log("#foo\bar"); // "#fooar" (\b is the backspace control character) document.querySelector("#foo\bar"); // Does not match anything console.log("#foo\\bar"); // "#foo\bar" console.log("#foo\\\\bar"); // "#foo\\bar" document.querySelector("#foo\\\\bar"); // Match the first div document.querySelector("#foo:bar"); // Does not match anything document.querySelector("#foo\\:bar"); // Match the second div script>
Examples
Finding the first element matching a class
In this example, the first element in the document with the class » myclass » is returned:
const el = document.querySelector(".myclass");
Complex selectors
const el = document.querySelector("div.user-panel.main input[name='login']");
Negation
As all CSS selector strings are valid, you can also negate selectors:
const el = document.querySelector( "div.user-panel:not(.main) input[name='login']", );
This will select an input with a parent div with the user-panel class but not the main class.
Specifications
Browser compatibility
BCD tables only load in the browser
See also
Found a content problem with this page?
This page was last modified on Jul 17, 2023 by MDN contributors.
Your blueprint for a better internet.
MDN
Support
Our communities
Developers
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2023 by individual mozilla.org contributors. Content available under a Creative Commons license.