0

I'm sorry, I speak a little English.

My HTML:

<div class="widgetcontent">
    <ul>
        <li class="cat-item cat-item-526">
            <a href="a-test">A test</a>
        </li>
        <li class="cat-item cat-item-527">
            <a href="b-test">B test</a>
            <ul class='children'>
                <li class="cat-item cat-item-528">
                    <a href="test-b1">Test B1</a>
                </li>
                <li class="cat-item cat-item-529">
                    <a href="test-b2">Test B2</a>
                </li>
            </ul>
        </li>
    </ul>
</div>

I would like:

If there is ul.children, modify with JavaScript and add the div.dropdown:

<li class="cat-item cat-item-527">
    <a href="b-test">B test</a>
    <div class="dropdown" onclick="myFunction('cat-item-527')">▾</div><!-- ADD -->
    <ul class='children'>
        <li class="cat-item cat-item-528">
            <a href="test-b1">Test B1</a>
        </li>
        <li class="cat-item cat-item-529">
            <a href="test-b2">Test B2</a>
        </li>
    </ul>
</li>

How to? Without jQuery or another JS framework. Native JS please.

Thank you very much.

jozs2021
  • 91
  • 7

1 Answers1

1

You can do this by finding all li elements and then determining if there is a ul inside it. If so just add an element using insertBefore

In this example I have coloured the element red just to indicate its added in the correct place.

[...document.querySelectorAll("ul li.cat-item")].forEach(li => {
   const ul = li.querySelector("ul.children");
   if(ul){
     const div = document.createElement("div");
     div.classList.add("dropdown");     
     div.addEventListener("click",() => console.log("Clicked new div", li.className))
     li.insertBefore(div,ul)
   }
});
.dropdown{
  height:10px;
  background-color:red
}
<div class="widgetcontent">
    <ul>
        <li class="cat-item cat-item-526">
            <a href="a-test">A test</a>
        </li>
        <li class="cat-item cat-item-527">
            <a href="b-test">B test</a>
            <ul class='children'>
                <li class="cat-item cat-item-528">
                    <a href="test-b1">Test B1</a>
                </li>
                <li class="cat-item cat-item-529">
                    <a href="test-b2">Test B2</a>
                </li>
            </ul>
        </li>
    </ul>
</div>
Jamiec
  • 133,658
  • 13
  • 134
  • 193