//Html编码获取Html转义实体 function htmlEncode(value) { return $('
').text(value).html(); } //Html解码获取Html实体 function htmlDecode(value) { return $('
').html(value).text(); } function dateformat(extra, date) { const D = new Date(date); const time = { 'Y': D.getFullYear(), 'm': D.getMonth() + 1, 'd': D.getDate(), 'H': D.getHours(), 'i': D.getMinutes(), 's': D.getSeconds(), }; const key = extra.split(/\W/); let _date; for (const k of key) { time[k] = time[k] < 10 ? '0' + time[k] : time[k]; _date = extra.replace(k, time[k]); extra = _date; } return _date; }; /** * jQuery org-chart/tree plugin. * * Author: Wes Nolte * http://twitter.com/wesnolte * * Based on the work of Mark Lee * http://www.capricasoftware.co.uk * * Copyright (c) 2011 Wesley Nolte * Dual licensed under the MIT and GPL licenses. * */ (function ($) { $.fn.jOrgChart = function (options) { var opts = $.extend({}, $.fn.jOrgChart.defaults, options); var $appendTo = $(opts.chartElement); // build the tree $this = $(this); var $container = $("
"); if ($this.is("ul")) { buildNode($this.find("li:first"), $container, 0, opts); } else if ($this.is("li")) { buildNode($this, $container, 0, opts); } $appendTo.append($container); }; // Option defaults $.fn.jOrgChart.defaults = { chartElement: 'body', depth: -1, chartClass: "jOrgChart" }; var nodeCount = 0; // Method that recursively builds the tree function buildNode($node, $appendTo, level, opts) { var $table = $(""); var $tbody = $(""); // Construct the node container(s) var $nodeRow = $("").addClass("node-cells"); var $nodeCell = $(""); var $downLineCell = $(""); $childNodes.each(function () { var $left = $("").addClass("line left top"); var $right = $("").addClass("line right top"); $linesRow.append($left).append($right); }); // horizontal line shouldn't extend beyond the first and last child branches $linesRow.find("td:first") .removeClass("top") .end() .find("td:last") .removeClass("top"); $tbody.append($linesRow); var $childNodesRow = $(""); $childNodes.each(function () { var $td = $("
").addClass("node-cell").attr("colspan", 2); var $childNodes = $node.children("ul:first").children("li"); var $nodeDiv; if ($childNodes.length > 1) { $nodeCell.attr("colspan", $childNodes.length * 2); } // Draw the node // Get the contents - any markup except li and ul allowed var $nodeContent = $node.clone() .children("ul,li") .remove() .end() .html(); //Increaments the node count which is used to link the source list and the org chart nodeCount++; $node.data("tree-node", nodeCount); $nodeDiv = $("
").addClass("node") .data("tree-node", nodeCount) .append($nodeContent); // Expand and contract nodes if ($childNodes.length > 0) { // $nodeDiv.click(function () { // var $this = $(this); // var $tr = $this.closest("tr"); // // if ($tr.hasClass('contracted')) { // $this.css('cursor', 'n-resize'); // $tr.removeClass('contracted').addClass('expanded'); // $tr.nextAll("tr").css('visibility', ''); // // // Update the
  • appropriately so that if the tree redraws collapsed/non-collapsed nodes // // maintain their appearance // $node.removeClass('collapsed'); // } else { // $this.css('cursor', 's-resize'); // $tr.removeClass('expanded').addClass('contracted'); // $tr.nextAll("tr").css('visibility', 'hidden'); // // $node.addClass('collapsed'); // } // }); } $nodeCell.append($nodeDiv); $nodeRow.append($nodeCell); $tbody.append($nodeRow); if ($childNodes.length > 0) { // if it can be expanded then change the cursor // $nodeDiv.css('cursor', 'pointer'); // recurse until leaves found (-1) or to the level specified if (opts.depth == -1 || (level + 1 < opts.depth)) { var $downLineRow = $("
  • ").attr("colspan", $childNodes.length * 2); $downLineRow.append($downLineCell); // draw the connecting line from the parent node to the horizontal line $downLine = $("
    ").addClass("line down"); $downLineCell.append($downLine); $tbody.append($downLineRow); // Draw the horizontal lines var $linesRow = $("
      
    "); $td.attr("colspan", 2); // recurse through children lists and items buildNode($(this), $td, level + 1, opts); $childNodesRow.append($td); }); } $tbody.append($childNodesRow); } // any classes on the LI element get copied to the relevant node in the tree // apart from the special 'collapsed' class, which collapses the sub-tree at this point if ($node.attr('class') != undefined) { var classList = $node.attr('class').split(/\s+/); $.each(classList, function (index, item) { if (item == 'collapsed') { $nodeRow.nextAll('tr').css('visibility', 'hidden'); $nodeRow.removeClass('expanded'); $nodeRow.addClass('contracted'); $nodeDiv.css('cursor', 's-resize'); } else { $nodeDiv.addClass(item); } }); } if ($node.attr('link') && $node.attr('link') != '') { let link = $node.attr('link'); $nodeDiv.html('

    ' + $nodeDiv.text() + '

    ') } else if ($node.attr('href') && $node.attr('href') != '') { let href = $node.attr('href'); $nodeDiv.html('

    ' + $nodeDiv.text() + '

    ') } $table.append($tbody); $appendTo.append($table); /* Prevent trees collapsing if a link inside a node is clicked */ $nodeDiv.children('a').click(function (e) { e.stopPropagation(); }); }; })(jQuery); //获取div下的表单属性 $.fn.serializeDiv = function() { let json = {}; let inputs = $(this).find('input'), selects = $(this).find('select'), textareas = $(this).find('textarea'); let forms = inputs.add(selects).add(textareas); $.each(forms, function(key, value) { let name = forms.eq(key).attr('name'), id = forms.eq(key).attr('id'), val = forms.eq(key).val(); if (name) { json[name] = val; } else if (id) { json[id] = val; } }); return json; }; //获取div下的表单属性并转为json $.fn.serializeDivJson = function() { return JSON.stringify($(this).serializeDiv()); };