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 Practice Selecting Elements

Indu khan
Indu khan
169 Points

Why getting error? Please explain

Why getting error? Please explain

js/app.js
let navigationLinks = document.querySelectorAll('li');
let galleryLinks;
let footerImages;
index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Nick Pettit | Designer</title>
    <link rel="stylesheet" href="css/normalize.css">
    <link href='http://fonts.googleapis.com/css?family=Changa+One|Open+Sans:400italic,700italic,400,700,800' rel='stylesheet' type='text/css'>
    <link rel="stylesheet" href="css/main.css">
    <link rel="stylesheet" href="css/responsive.css">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  </head>
  <body>
    <header>
      <a href="index.html" id="logo">
        <h1>Nick Pettit</h1>
        <h2>Designer</h2>
      </a>
      <nav>
        <ul>
          <li><a href="index.html" class="selected">Portfolio</a></li>
          <li><a href="about.html">About</a></li>
          <li><a href="contact.html">Contact</a></li>
        </ul>
      </nav>
    </header>
    <div id="wrapper">
      <section>
        <ul id="gallery">
          <li>
            <a href="img/numbers-01.jpg">
              <img src="img/numbers-01.jpg" alt="">
              <p>Experimentation with color and texture.</p>
            </a>
          </li>
          <li>
            <a href="img/numbers-02.jpg">
              <img src="img/numbers-02.jpg" alt="">
              <p>Playing with blending modes in Photoshop.</p>
            </a>
          </li>
        </ul>
      </section>
      <footer>
        <a href="http://twitter.com/nickrp"><img src="img/twitter-wrap.png" alt="Twitter Logo" class="social-icon"></a>
        <a href="http://facebook.com/nickpettit"><img src="img/facebook-wrap.png" alt="Facebook Logo" class="social-icon"></a>
        <p>&copy; 2016 Nick Pettit.</p>
      </footer>
    </div>
  <script src="js/app.js"></script>
  </body>
</html>

2 Answers

Steven Parker
Steven Parker
231,046 Points

The correct elements are not being selected.

The challenge ask you to "select all links in the nav element". But a link is represented by an "a" (anchor) element and "li" represents a list item.

But you also don't want every "a" element, so you might want to create a descendant selector by combining it with "nav" to return only those links in that element.

You need to select the links in the navigation section. In order to do so, you need to narrow down your selector choice in the querySelectorAll method.

First add to the front of your string, nav since you only want to focus on things in the nav area. Then you can either remove and replace the li with a or add the a after the li. Adding it after will be more descriptive so probably better practice to add it after. The reason you want the a tag is that the a tag is the anchor tag, which is the link itself. (In HTML)

So you are wanting to have something like this:

...querySelectorAll('nav li a')
Steven Parker
Steven Parker
231,046 Points

I believe the "best practice" is to use the fewest components in the selector that will return the correct element set.

Depends on your intentions. Using the fewest components may not be what you want, as nav a in this case will result in a correct element set UNTIL a tag is added outside of the unordered list for some reason. nav ul li a or nav li a will produce the same result for every item in the list an disregard all items outside the list but still live within the nav tag.

Ideally though, alongside your point. the fewest components would be better suited to proper id/class naming, therefore allowing for you to be concise but specific.

Steven Parker
Steven Parker
231,046 Points

But if you revisit the requirement to "select all links in the nav element", it doesn't say to further restrict it only links also in a list. So if there were links outside the list, disregarding them would probably cause the selection to fail.

Per the requirements, yes, nav a will suffice and had there been a tags outside of the list, they would not have been selected causing a fail. Due to what was given, I chose to be specific as there are only a tags in the list. The point again was that specificity can lead to more controlled results. A best practice.