Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

JavaScript JavaScript and the DOM Traversing the DOM Sibling Traversal

:) :((
:) :((
6,776 Points

I need help on this challenge

i don't understand why my code is not running , thanks.

app.js
var list = document.getElementsByTagName('ul')[0];
var p = document.getElementsByTagName('p');
list.addEventListener('click', function(e) {
  if (e.target.tagName == 'BUTTON') {
    let li = e.target.parentNode;
    let prevP = p.previousElementSibling;
    let ul  = li.parentNode;
    ul.insertBefore(li, prevP);
  }
});
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>

2 Answers

Steven Parker
Steven Parker
208,472 Points

Whoa ... you're going a bit overboard here. Here's a few hints:

  • you won't need to define any additional globals
  • you can navigate directly from the button (e.target) to the paragraph
  • you won't need to reference the parent element
  • you don't need to add any new elements
  • but you do need to set the class on the paragraph
  • this task can be done in one single statement
:) :((
:) :((
6,776 Points

Can you please show an example, so i can understand better?

Steven Parker
Steven Parker
208,472 Points

Try implementing the hints, then post your modified code if you're still having trouble.

And you might consider giving yourself a slightly more compact user name. :see_no_evil:

:) :((
:) :((
6,776 Points

"' js var list = document.getElementsByTagName('ul')[0]; list.addEventListener('click', function(e) { if (e.target.tagName == 'BUTTON') { document.querySelector('p').className= "highlight";
} });"" i give up , i really can't understand and i did the whole chapter again and looked over mdn. :c

Steven Parker
Steven Parker
208,472 Points

The problem with "document.querySelector('p')" is that it will always select the first paragraph on the page, which may not be the one which is a sibling of the pressed button. So it is important to use DOM traversal to find the correct paragraph.

You had the right idea before to use "previousElementSibling", it just needs to be employed in a different way.

:) :((
:) :((
6,776 Points

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

var p = document.querySelector("p.highlight"); list.addEventListener('click', function(e) { if (e.target.tagName == 'BUTTON') { let li = e.target.parentNode; let prevP = p.previousElementSibling; let ul = li.parentNode; ul.insertBefore(li, prevP); } });"' "'html ><li><p class="highlight">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> "'

I tried putting a class to a paragraph , still doesn't work, i tried list.chidren and document.querySelector("list > p") but still the same

Steven Parker
Steven Parker
208,472 Points

It's hard to tell without formatting, but it looks like you went back to the original code — all of my original hints still apply to that code.

And the Markdown formatting marks for code are 3 accents (```), not 3 apostrophes (''').