JSLists
Example 1:

Example 2:

Example 3:
jslists is a small JavaScript library that can turn those pesky unordered & ordered list into a funky tree. There is an example to the left which demostrates the basic functionality

Because JSLists doesn't effect any element of the HTML list you are passing is, you can use all of the functionality of standard HTML list. So ALL list items can contain any valid HTML elements, such as anchors <a>, <img>, <div> etc. It's pretty easy to use. To create a tree element, give the UL/OL an id, then simply add another unordered or ordered list as a list item. The text within the list item becomes the heading for that list.

The markup for the Formula One Teams list to the left is:
<ul id='f1teams' class='jslists'>
 <li>Formula One Teams (2018)
  <ul>
   <li>&#9675; Scuderia Ferrari</li>
   <li>&#9675; Sahara Force India F1 Team</li>
   <li>&#9675; Haas F1 Team</li>
   <li>&#9675; McLaren F1 Team</li>
   <li>&#9675; Mercedes AMG Petronas Motorsport</li>
   <li>&#9675; Aston Martin Red Bull Racing</li>
   <li>&#9675; Renault Sport Formula One Team</li>
   <li>&#9675; Alfa Romeo Sauber F1 Team</li>
   <li>&#9675; Red Bull Toro Rosso Honda</li>
   <li>&#9675; Williams Martini Racing</li>
  </ul>
 </li>
</ul>

You can also create nested lists using jsLists. Check out the source code for Example 3 and you will see the pattern is the same as the standard list.