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
195,578 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
195,578 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
195,578 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
195,578 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 (''').