为了项目需要写了一个select树的实现,虽然写的比较挫,见谅。还有一些功能还没实现。效果如图:
!function($) { var SelectTree = function(element, options) { this.element = element; this.options = options; this.init(options); } SelectTree.prototype = { convert : function(rows) { var element = $(this.element); element.empty(); var options = this.options; function exists(rows, master) { for (var i = 0; i < rows.length; i++) { if (rows[i].id == master) return true; } return false; } var nodes = []; for (var i = 0; i < rows.length; i++) { var row = rows[i]; if (!exists(rows, row[options.pid])) { nodes.push({ id : row[options.id], text : '' }); element.append("<option ' id=" + row[options.id] + ">" + row[options.value]+ "</option>"); } } while (nodes.length) { var node = nodes.shift(); for (var i = 0; i < rows.length; i++) { var row = rows[i]; if (row.master == node.id) { nodes.push({ id : row[options.id], text : node.text + options.spik }); element.find("#"+row[options.pid]).after("<option id="+ row[options.id]+">" + node.text + options.spik + row[options.value] + "</option>"); } } } return nodes; }, init : function(options) { var _this = this; if (options.url) { $.ajax({ type : options.method, url : options.url, data : options.params, dataType : 'json', cache : options.cache }).done(function(data) { try { // 获得root对象 var items = data; if ($.isArray(data[options.root])) { items = data[opts.root]; } var row =items; row = _this.convert(row); } catch (e) { throw e; } }); } else { var items = options.data || {}; _this.convert(row); } } } $.fn.selectTree = function(options, param) { if (typeof options == 'string') { return $.fn.selectTree.methods[options](this, param); } else { var data = this.data('SelectTree'); if (!data) { var options = $.extend(true, {}, $.fn.selectTree.defaults, options); data = new SelectTree(this, options); } else { data.opts = $.extend(true, {}, data.opts, options); } this.data('selectTree', data); return $.extend(true, this, data); } }; $.fn.selectTree.methods = { options : function(jq) { }, add : function(jq, options) { return jq.each(function() { }); } }; $.fn.selectTree.defaults = { url : ‘’,//url地址 data : null,//如果是本地的数据 params : {},//提交后台的数据 method : 'POST', root : 'root', id : 'id',//id号 spik:'--',// value : 'title', pid : 'master',//父id cache : false, loadFilter : function(d) { return d; } }; }(window.jQuery);