?
Solved

Javascript Tree Traversal

Posted on 2011-03-15
3
Medium Priority
?
572 Views
Last Modified: 2012-05-11
Can you demonstrate tree traversal in Javascript on this page?
0
Comment
Question by:JCW2
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
3 Comments
 
LVL 20

Accepted Solution

by:
Proculopsis earned 1000 total points
ID: 35148418

Do you mean something like this:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>http://www.experts-exchange.com/Programming/Languages/Scripting/JavaScript/Q__26783203.html</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">

jQuery(document).ready( function () {

  var tree = {
    myNull: null,
    myBoolean: true,
    myNumber: 3.1415926535897932,
    myString: "Hello World!",
    myArray: [ null, true, 3.1415926535897932, "Hello World!" ],
    myObject: { myNull: null, myBoolean: true, myNumber: 3.1415926535897932, myString: "Hello World!", myArray: [ null, true, 3.1415926535897932, "Hello World!" ] }
  };

  $("#result").text( tree.traverse() );

});

Object.prototype.traverse = function(){
  var result = "";
  var depth = (arguments.length != 0)? arguments[0] + 1 : 0;
  var level = "";
  while ( level.length != depth * 2 ) level += "  ";

  switch ( type( this ) ) {
    case "Boolean": 
    case "Number": 
      result += this;
    break;

    case "String":
      result += "\"" + this + "\"";
    break;

    case "Array":
      resolve( this, "[", "]", false );
    break;

    case "Object":
      resolve( this, "{", "}", true );
    break;
  }

  return result;

  function resolve( value, prefix, suffix, label ) {
    result += prefix + "\r";
    for ( entry in value )
      if( isSimple( value[entry] ) ){

      inset( "  " );
      if ( label ) result += "\"" + entry + "\": ";
      result += (value[entry] != null)? value[entry].traverse( depth ) : "null";
      result += ",\r";
    }
    result = result.replace( /,\r$/m, "\r" );
    inset( suffix );
  }

  function type( probe ) {
    var theType = "Null";
    if ( probe != null ) theType = probe.constructor.toString().replace( /(?:\n|\r|.)*?[ ]{1}([^\(]+)(?:\n|\r|.)*/m, "$1" );
    return theType;
  }

  function isSimple( value ) {
    return "Null,Boolean,Number,String,Array,Object".indexOf( type( value ) ) != -1;
  }

  function inset( value ) {
    result += level + value;
  }

}

</script>
</head>
<body>

<pre id="result">
</pre>

</body>
</html>

Open in new window

0
 
LVL 19

Assisted Solution

by:nschafer
nschafer earned 1000 total points
ID: 35168515
Do you mean making a TreeView in javascript?

If so here is a tutorial I've created on the subject.

http://www.applicationgroup.com/tutorials/treeview/JS_TreeView_Sample.asp

Hope this helps,
Neal.
0
 

Author Closing Comment

by:JCW2
ID: 35222569
Thank you for your help.
0

Featured Post

Optimize your web performance

What's in the eBook?
- Full list of reasons for poor performance
- Ultimate measures to speed things up
- Primary web monitoring types
- KPIs you should be monitoring in order to increase your ROI

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In this post we will learn different types of Android Layout and some basics of an Android App.
Q&A with Course Creator, Mark Lassoff, on the importance of HTML5 in the career of a modern-day developer.
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
Starting up a Project
Suggested Courses

801 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question