Where to load JavaScript if we are selecting elements on the page?
Always load it before the closing body tag (
</body>). It is because, we need to have all elements before we start selecting them in JavaScript. We get null if we try to grab elements placing the <script> tag in the head because the elements are not yet created when the JavaScript is run.Other option: (to use in
<head> tag)- use defer and async
- we can listen for the
DOMContentLoadedevent and then try to select elements from the page.
Best way: Load the JS before the
</body> tag.- querySelector: Returns first match
const p = document.querySelector('p');- querySelectorAll: Returns all matches as a NodeList (like array but without array helper functions)
const p = document.querySelectorAll('p');In querySelector and querySelectorAll, the argument we pass is nearly similar to CSS Selectors.
We can use things like:
-
.item(element with class of item) ordiv.item(div with class of item) etc.
- Parent-child selector: e.g. to grab images inside div with class item
const img = document.querySelector('.item img');<div class="items">
<div class="item item1">
<img src="http://img1.com" >
</div>
<div class="item">
<img src="http://img2.link" >
</div>
</div>
In above HTML, suppose if we want just the first item and find the image inside of the item.
We have 2 options:
document.querySelector('item img');
const item1 = document.querySelector('.item1');
const item1Img = item1.querySelector(img); //importantNote: We also have dated/old ways of selecting elements from DOM like
getElementById, getElementsByClassName, getElementsByTagName etc.