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


Marie Josée Laporte
Marie Josée Laporte
8,188 Points

selecting multiple element chalenge

It's a simple challenge from the Javascript and the DOM...

here's the question:

We have some JavaScript code that will cycle over list items and apply colors from an array called colors. The code will apply the first color to the first list item, the second color to the second list item and so on. But the code is not complete. On line 1 of app.js, set the variable listItems to refer to a collection. The collection should contain all list items in the unordered list element with the id of rainbow.

the 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>

the javascript: let listItems; const colors = ["#C2272D", "#F8931F", "#FFFF01", "#009245", "#0193D9", "#0C04ED", "#612F90"];

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

my answer: 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 think I don't understand is why I don't have to write: let listItems = document.querySelectorAll("#rainbow, li");

with the id selector #. If I put the # it doesn't do what is expected... Do I have an other error or you simple do not put the #... but in the course it is told to use the "." class selector...

Can someone help me?

2 Answers

28,558 Points

Your attempt:

let listItems = document.querySelectorAll("#rainbow, li");

Is pretty close to correct. The issue is the comma, it shouldn't be there. A comma is used to specify multiple separate selectors in a CSS rule, but in this instance you want to use a descendant selector which targets elements that are nested within other elements. A descendant selector works by having the selectors separated only by a space. So if you simply remove the comma like this:

let listItems = document.querySelectorAll("#rainbow li");

Then you will select the right elements.