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) Traversing the DOM Sibling Traversal

Richard Preske
PLUS
Richard Preske
Courses Plus Student 4,356 Points

Not sure about this one.

I think I am adding too much code to this. The error states the button doesn't affect the paragraph siblings. It works for the first highlight only.

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

list.addEventListener('click', function(e) {
  if (e.target.tagName == 'BUTTON') {
     let button = document.querySelector('button');
     let p = button.previousElementSibling;
     p.className = "highlight";
     if (event.target.className == "highlight") { 
      let li = event.target.parentNode;
      let prevLI = p.previousElementSibling;
      let ul = p.parentNode;
       if (prevLI) {
        ul.insertBefore(li, prevLI);
      }  

    } 
  }   

});
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>

6 Answers

Steven Parker
Steven Parker
229,670 Points

You're right about over-doing it, this challenge can be solved by adding just one line to the provided code (and nothing conditional). Just navigate from the button (which the code has already identified as "e.target") to the paragraph, and set the class name on it.

Richard Preske
PLUS
Richard Preske
Courses Plus Student 4,356 Points

This is a hard one. Do you have a hint? Not sure how you can solve this with just one line of code. Don't give me the answer, just a hint, thanks.

Richard Preske
PLUS
Richard Preske
Courses Plus Student 4,356 Points

Not getting it I tried these so far, just guessing right now. I know you need the previousElementSibling and highlight class name added to the paragraph:

It wants me to set the variable p for the element <p>. p,target.className = highlight.previousElementSibling;

e.target.className = p.previousElementSibling;

Steven Parker
Steven Parker
229,670 Points

Another hint: what is being assigned (the right side of the operator) is simply "highlight". Everything else will be on the left side.

Richard Preske
PLUS
Richard Preske
Courses Plus Student 4,356 Points

p.previousElementSibling.className = "highlight";

close??

Steven Parker
Steven Parker
229,670 Points

No "p" has been defined at that point in the code.

Richard Preske
PLUS
Richard Preske
Courses Plus Student 4,356 Points

e.previousElementSibling.className = "highlight";

This didn't work either.

Steven Parker
Steven Parker
229,670 Points

The button is "e.target", just "e" is an event object.