html - Collapse and Expand Tree structure in Javascript -


i need on collapse , expand using javascript. here running code (.html)

 <h2>test</h2>   <html lang="en">   <head>      <meta http-equiv="content-type" content="text/html; charset=utf-16">      <title></title>      <script type="text/javascript">           function toggledisplay(element)          {                  element.style.display = element.style.display === 'none' ? '' : 'none';          };         function toggledisplayall(elements)          {            for(var i=0; i<elements.length; i++)            {               toggledisplay(elements[i]);            }         }         </script>    </head>    <body>       <ul>       <a onclick="toggledisplayall(this.parentnode.getelementsbytagname('ul')); return false;" href="#">name:</a>         <ul style="display:none;">         <a onclick="toggledisplayall(this.parentnode.getelementsbytagname('ul')); return false;" href="#">address: </a>             <ul style="display:none;">             <a onclick="toggledisplayall(this.parentnode.getelementsbytagname('li')); return false;" href="#">subject: </a>                 <ul style="display:none;">                     <li style="display:none;">id                     </li>                 </ul>             </ul>          </ul>      </ul>   </body>  </html> 

if run html, out put as

 name 

on click of name, showing child elements

 name:     address:         subject: 

on click of subject showing id

  name:     address:         subject:                . id 

what want here each child should open on parent click.

when run html, name dispaly

  name: 

on click of name, address displayed child element.

   name:         address: 

onclick of address, subject display

   name:         address:             subject: 

than on click of subject, id show

   name:         address:             subject:                  . id 

how implement tree structure. doing wrong here. please suggest me.

check this:

$('.expand').click(function() {    $('ul', $(this).parent()).eq(0).toggle();  });
ul li ul {    display: none;  }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>  <ul>    <li>      <a class="expand">root</a>      <ul>        <li>          <a class="expand">child</a>          <ul>            <li>              <a class="expand">super child</a>            </li>          </ul>        </li>      </ul>    </li>  </ul>

edit

if don't want use jquery, can try this:

var expander = document.queryselectorall('.expand');    (var = 0; < expander.length; ++i) {    expander[i].onclick = function() {      var ul = this.parentelement.queryselectorall('ul')[0];            if (ul.offsetheight > 0) {        ul.style.display = 'none';      } else {        ul.style.display = 'block';      }    }  }
ul li ul {    display: none;  }
    <ul>        <li>          <a class="expand">root</a>          <ul>            <li>              <a class="expand">child</a>              <ul>                <li>                  <a class="expand">super child</a>                </li>              </ul>            </li>          </ul>        </li>      </ul>


Comments

Popular posts from this blog

powershell Start-Process exit code -1073741502 when used with Credential from a windows service environment -

twig - Using Twigbridge in a Laravel 5.1 Package -

c# - LINQ join Entities from HashSet's, Join vs Dictionary vs HashSet performance -