JavaScript JavaScript and the DOM Traversing the DOM Sibling Traversal

Johnny Kan
Johnny Kan
5,862 Points

Add class of highlight to element & sibling traversal. What is this challenge about? What are they asking?

I must have misunderstood the challenge. Here are the instructions: "The <ul> stored in the variable list has a click event listener that targets each <button> in the list. Complete the code to add a class of highlight to a <p> element that's an immediate previous sibling of the button being clicked."

I interpret it as setting the paragraph's class to 'highlight' when the Highlight-button is clicked. But apparently that's not it. Can anyone explain what this challenge is about? What am I supposed to do/what are they asking for?

Thanks in advance.

app.js
var list = document.getElementsByTagName('ul')[0];

list.addEventListener('click', function(e) {
  if (e.target.tagName == 'BUTTON') {
    let p = e.target.previousElementSibling;
    p.className = 'highlight';
  }
});
index.html
<!DOCTYPE html>
<html>
    <head>
        <title>JavaScript and the DOM</title>
    </head>
    <link rel="stylesheet" href="style.css" />
    <body>
        <section>
            <h1>Making a Webpage Interactive</h1>
            <p>Things to Learn</p>
            <ul>
                <li><p>Element Selection</p><button>Highlight</button></li>
                <li><p>Events</p><button>Highlight</button></li>
                <li><p>Event Listening</p><button>Highlight</button></li>
                <li><p>DOM Traversal</p><button>Highlight</button></li>
            </ul>
        </section>
        <script src="app.js"></script>
    </body>
</html>
Johnny Kan
Johnny Kan
5,862 Points

Updated the code without <h1></h1>.

1 Answer

Clayton Perszyk
MOD
Clayton Perszyk
Treehouse Moderator 46,307 Points

You don't need <h1>list</h1>. You are getting the list from the DOM with the document.getElementsByTagName('ul')[0];.

Otherwise, it should work.

Johnny Kan
Johnny Kan
5,862 Points

Oh sorry. The h1 was an early test I did, i.e. it should not be in my final code. But with or without the h1, I also believe it should work... so I guess I'm not the only one who doesn't understand what they are asking for in this challenge.