…and I like the new .on() and .off() API for setting up events.
I wrote some code that uses it, just for practice.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | $.fn.tree = function (data) { var $el = $( this ), html = []; function renderNode(node) { if ( typeof node === "object" ) { html.push( "<ul>" ); for ( var key in node) { if (node.hasOwnProperty(key)) { html.push( "<li><strong>" + key + ": </strong>" ); html.push( typeof node[key] == "object" ? renderNode(node[key]) : node[key]); html.push( "</li>" ); } } html.push( "</ul>" ); } } renderNode(data); $el.html(html.join( "" )); $el.on( 'click' , 'strong' , function () { $( this ).closest( 'li' ).find( 'ul' ).toggle(200); }); }; $( "<div>" ).appendTo( "body" ).tree({ name: { first: "Benjamin" , last: "Atkin" }, location: { city: "Boulder" , state: "CO" }, accounts: { social: { }, creative: { } } }); |