JavaScript JavaScript and the DOM Getting a Handle on the DOM Practice Selecting Elements

Tung Nguyen
Tung Nguyen
1,833 Points

How can I get select all <li> under <nav>? I'm using getElementsByTag but it's only returning 1 link.

there are 3 <li> tag under <nav>, but using getElementsByTag is only returning 1 link?

js/app.js
let navigationLinks = document.getElementsByTagName('nav');
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">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>

1 Answer

Steven Parker
Steven Parker
173,506 Points

There's only one "nav" element, which is the tag you are selecting. But the instructions want you to select the links inside it. And link elements are "a", "li" are list items.

Now you could use indexing and function chaining to do this, but that would be really verbose and complex:

let myTargets = document.getElementsByTagName('container')[0].getElementsByTagName('target');

But there's a much simpler way using a method that will take a combined selector.

Hint: try querySelectorAll with a descendant selector.

Tung Nguyen
Tung Nguyen
1,833 Points

Thank you for your response. I've tried using document.querySelectorAll('nav'); but still returning 1 link

Steven Parker
Steven Parker
173,506 Points

It's the links (a) inside the nav that are your actual target. A descendant selector is where you name the container, and then the target, separated by a space.