Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

JavaScript JavaScript and the DOM (Retiring) Getting a Handle on the DOM Selecting Multiple Elements

Kipaya Kapiga
Kipaya Kapiga
6,066 Points

Getting error despite right outcome

When I preview my code, each list item is in a different text color, matching what's in the color array. But when I check my work, I get error messages. Here's what I did:

I removed the id attribute from the ul tag, and added a class element to each li element, setting the value to "rainbow"

Here's the script:

let listItems = document.getElementsByClassName('rainbow'); const colors = ["#C2272D", "#F8931F", "#FFFF01", "#009245", "#0193D9", "#0C04ED", "#612F90"];

for (let i = 0; i < colors.length; i ++) { listItems[i].style.color = colors[i];
}

index.html
<!DOCTYPE html>
<html>
  <head>
    <title>Rainbow!</title>
  </head>
  <body>
    <ul>
      <li class="rainbow">This should be red</li>
      <li class="rainbow">This should be orange</li>
      <li class="rainbow">This should be yellow</li>
      <li class="rainbow">This should be green</li>
      <li class="rainbow">This should be blue</li>
      <li class="rainbow">This should be indigo</li>
      <li class="rainbow">This should be violet</li>
    </ul>
    <script src="js/app.js"></script>
  </body>
</html>
js/app.js
let listItems = document.getElementsByClassName('rainbow');
const colors = ["#C2272D", "#F8931F", "#FFFF01", "#009245", "#0193D9", "#0C04ED", "#612F90"];

for (let i = 0; i < colors.length; i ++) {
  listItems[i].style.color = colors[i];    
}

2 Answers

This does work, however the challenge is to get all of the list items that are children of the element with the ID of #rainbow.

The code below will achieve this:

let listItems = document.querySelectorAll('#rainbow li');
const colors = ["#C2272D", "#F8931F", "#FFFF01", "#009245", "#0193D9", "#0C04ED", "#612F90"];

for(var i = 0; i < colors.length; i ++) {
  listItems[i].style.color = colors[i];    
}

The video before the challenge should cover this as well: https://teamtreehouse.com/library/using-css-queries-to-select-page-elements