In my code, document.querySelector(.list-group-item:last-child) cannot find the element and returns null when there is a li element without the class after the li elements with the class "list-group-item".
my question is that why the querySelector pick up the last li without class ".list-group-item" even though I specify the class name in the querySelector, I think the last li shouldn't be picked up.
Is this the specification of the querySelector?
Thank you for helping!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- bootstrap css -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<title>Item Lister</title>
</head>
<body>
<div class="container">
<div id="main" class="card card-body">
<h2 class="title">
Items
</h2>
<ul id="items" class="list-group">
<li class="list-group-item">
Item 1
</li>
<li class="list-group-item">
Item 2
</li>
<li class="list-group-item">
Item 3
</li>
<!-- Not classed <li> before classed <li>s -->
<li>Item 3.5</li>
<li class="list-group-item">
Item 4
</li>
<!-- Not classed <li> after classed <li>s-->
<!-- this causes error -->
<li>Item 5</li>
</ul>
</div>
</div>
<script>
/* Ask a Question */
// TypeError: lastItem is null, when there is a not classed <li> after classed <li>s.
// select by the class .list-group-item, pseudo class: last-child
let lastItem = document.querySelector('.list-group-item:last-child');
lastItem.style.color = 'cyan';
/* The code below are references */
// select by the class .list-group-item
let item = document.querySelector('.list-group-item');
item.style.color = 'red';
// select by the class .list-group-item, pseudo class: nth-child(2)
let secondItem = document.querySelector('.list-group-item:nth-child(2)');
secondItem.style.color = 'coral';
// select by the element <li>, pseudo class: last-child
let liLastItem = document.querySelector('li:last-child');
liLastItem.style.color = 'cyan';
</script>
</body>
</html>