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

Ninian Bond
Ninian Bond
1,584 Points

It says to select a collection but the error I am getting says my selection is undefined when they try to use it again.

I was trying the let ListItems = document.querySelectorAll('#rainbow');

to select for all the elements with the id rainbow.

but there is only one and it's an unordered list.

so I tried querySelector('#rainbow');

Not sure what else to try.

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

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

1 Answer

Steven Parker
Steven Parker
231,248 Points

There can only be one element with a specific ID.

So you're right about that. But that's not what the challenge is asking you to select. The challenge says, "The collection should contain all list items in the unordered list element with the id of rainbow." So your targets for the collection are going to be list items.

Think about how you would do this for CSS, and then the selector can be used in querySelectorAll. You want list items, so the final target will be "li". But since you specifically want those that belong to the list that has the id of "rainbow", t his would be a good place for a descendant selector. By combining the id and the list item tag using a space, your selector would be "#rainbow li".