/* * the param is: url,data:json[[id,title,lft,rgt,pid]] 格式, */ (function($,window){ jQuery.fn.mtree=function(options){ var $owner=this, settings={url:'',data:'',collapse:true,folderitemcallback:function(id,object){return false;},itemcallback:function(id,object){return false;}}; settings=jQuery.extend(settings, $owner.settings || {}, options || {}); //todo:... $owner.settings=settings; var treeroot=jQuery(''); $owner.on('click',':checkbox.mtree_item',function(){ var theurl=settings.url; var $tthis=$(this); if(!$tthis.is(':checked')) return; var id=$tthis.val(); if(id==null||id=='') return; if(theurl!=null && theurl!='') { var pnode=$tthis.parent('li'); var ulnode=pnode.children('ul'); if(!ulnode.is('UL')) { jQuery.getJSON(theurl, {id:id}, function(json, textStatus) { //optional stuff to do after success if(json==null||json=='') return; parsedata($tthis,json,settings.collapse); }); } } var folderitemcallback=settings.folderitemcallback; folderitemcallback(id); }); $owner.live('click','a.mtree_item_a',function(){ var id=$(this).attr('rev') var itemcallback=settings.itemcallback; itemcallback(id); }); function parsedata(treenode,data,collapse) { var plft=treenode.attr('lft'); var prgt=treenode.attr('rgt'); var pnode=treenode; var tnode=null; var valindex; for (valindex in data) { var val=data[valindex]; var lft=val[2]; var rgt=val[3]; var id=val[0]; var title=val[1]; var pid=val[4]; var tempnode=jQuery('
  • '); if(rgt-lft>1) { var checkobj=null; if(collapse==true||collapse=='true') checkobj=jQuery(''); else checkobj=jQuery(''); var labelobj=jQuery(''); checkobj.appendTo(tempnode); labelobj.appendTo(tempnode); }else{ var aobj=jQuery(''+title+'') aobj.appendTo(tempnode); } var linode=tempnode; while(true) { plft=pnode.attr('lft'); prgt=pnode.attr('rgt'); if(lft>plft&&lft'); tnode.append(linode); pnode.append(tnode); } pnode=linode; break; }else{ var tppnode=pnode.parent("li"); if(!tppnode.is("LI")) { tppnode=pnode.parent("ul"); if(!tppnode.is("UL")) break; } pnode=tppnode; } } } } var url=$owner.settings.url; var jsondata=null; if (url!=null&&url!='') { jQuery.getJSON('url', {}, function(json, textStatus) { //optional stuff to do after success jsondata=json; }); } if($owner.settings.data!=null&&$owner.settings.data!='') { try{ jsondata=$owner.settings.data; }catch(e){alert(e);} } if(jsondata==null||jsondata=='') return null; parsedata(treeroot,jsondata,$owner.settings.collapse); $owner.append(treeroot); return {abort: function () {}}; } })(jQuery,window);