/** *name: jquery.checkTree *author: Elyor Latipov *version: 0.1.1 */ /**input data format: [{ item:{id:'id', label:'label',value:1, checked:false}, chidren:[{ item:{id:'id', label:'label', checked:false}, chidren:[...] }] }, ....] */ (function ($) { jQuery.fn.checkTree = function (settings) { settings = $.extend({ data: [], // input data which will be used to initilze the tree onExpand: null, // an event will be triggered when the tree node was expanded onCollapse: null, // an event will be triigered when the tree node was collapsed onPreCheck: null, // an event will be triggered before the tree node was checked onCheck: null, // an event will be triggered when the tree node was checked onUnCheck: null, // an event will be triggered when the tree node was unchecked onLabelHoverOver: null,// an event will be triggered when mouse hover over the label onLabelHoverOut: null // an event will be triggered when mouse hover out the label }, settings); var container = $(this), $tree = this; //get children html tag string function getChildrenHtml(treesdata) { var result = '', len = treesdata.length, node, clen, arrowClass, checkedClass = '' checkedChildren; for (i = 0; i < len; i++) { node = treesdata[i]; $.data($tree, node.item.id, node); //attach node data to node id clen = node.children ? node.children.length : 0; arrowClass = 'collapsed'; if (clen === 0) { arrowClass = 'nochildren'; checkClass = node.item.checked ? 'checked' : ''; } else { var checkedChildren = $.grep(node.children, function (el) { return el.item.checked; }); checkClass = checkedChildren.length === 0 ? '' : checkedChildren.length === clen ? 'checked' : 'half_checked'; } result += '
  • '; } return result; } //display children node with data source function updateChildrenNodes($li, data, isExpanded) { if (data.children && data.children.length > 0) { var innerHtml = isExpanded ? '