视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
jQuery数据显示插件整合实现代码_jquery
2020-11-27 21:01:13 责编:小采
文档


显示表格数据会涉及到一些东西,如字段显示隐藏,数据状态,分页之类。

由于我们公司的产品涉及到很多的表格数据显示,而且每张表的字段数都很多,在工作过程中(几任同仁的努力),整合出一套自认为较为轻巧的方案。如图:

其中涉及到的插件主要有:
jQuery.columnmanager.expand.js(扩展columnmanager)
jQuery.dropbox.js(自已写的)
jQuery.pager.expand.js(扩展pager)
jQuery.cookie.js
其中pager.expand.js,dropbox.js以及各插件间的整合在common.js里,代码如下:
代码如下:
//定义全局命名空间
var GLOBAL = {};
GLOBAL.Namespace = function(str) {
var arr = str.split("."), o = GLOBAL;
for (var i = (arr[0] == 'GLOBAL') ? 1 : 0; i < arr.length; i++) {
o[arr[i]] = o[arr[i]] || {};
o = o[arr[i]];
}
}
GLOBAL.Namespace("zyh");
/*
******************************************************************
jQuery.pager
******************************************************************
*/
(function($) {
$.fn.pager = function(options) {
var opts = $.extend({}, $.fn.pager.defaults, options);
return this.each(function() {
// empty out the destination element and then render out the pager with the supplied options
$(this).empty().append(renderpager(parseInt(options.pagenumber), parseInt(options.pagecount), options.buttonClickCallback, options.rowcount));
// specify correct cursor activity
//$('.pages li').mouseover(function() { document.body.style.cursor = "pointer"; }).mouseout(function() { document.body.style.cursor = "auto"; });
});
};
// render and return the pager with the supplied options
function renderpager(pagenumber, pagecount, buttonClickCallback, rowcount) {
// setup $pager to hold render
var $pager = $('');
// add in the previous and next buttons
$pager.append(renderButton('|<', pagenumber, pagecount, buttonClickCallback)).append(renderButton('<<', pagenumber, pagecount, buttonClickCallback));
// pager currently only handles 10 viewable pages ( could be easily parameterized, maybe in next version ) so handle edge cases
var startPoint = 1;
var endPoint = 6;
if (pagenumber > 3) {
startPoint = pagenumber - 3;
endPoint = pagenumber + 3;
}
if (endPoint > pagecount) {
startPoint = pagecount - 5;
endPoint = pagecount;
}
if (startPoint < 1) {
startPoint = 1;
}
// loop thru visible pages and render buttons
for (var page = startPoint; page <= endPoint; page++) {
var currentButton = $('

  • ' + (page) + '
  • ');
    page == pagenumber ? currentButton.addClass('pgCurrent') : currentButton.click(function() { buttonClickCallback(this.firstChild.data); });
    currentButton.appendTo($pager);
    }
    // render in the next and last buttons before returning the whole rendered control back.
    $pager.append(renderButton('>>', pagenumber, pagecount, buttonClickCallback)).append(renderButton('>|', pagenumber, pagecount, buttonClickCallback));
    $pager.append('
  • 共' + pagecount + "页
  • ");
    // if (rowcount != undefined) {
    // $pager.append('
  • 共' + rowcount + "条记录,最多显示600条
  • ");
    // }
    if (rowcount != undefined) {
    $pager.append('
  • ' + rowcount + '条记录
  • ');
    }
    return $pager;
    }
    // renders and returns a 'specialized' button, ie 'next', 'previous' etc. rather than a page number button
    function renderButton(buttonLabel, pagenumber, pagecount, buttonClickCallback) {
    var $Button = $('
  • ' + buttonLabel + '
  • ');
    var destPage = 1;
    // work out destination page for required button type
    switch (buttonLabel) {
    case "|<":
    destPage = 1;
    break;
    case "<<":
    destPage = pagenumber - 1;
    break;
    case ">>":
    destPage = pagenumber + 1;
    break;
    case ">|":
    destPage = pagecount;
    break;
    }
    // disable and 'grey' out buttons if not needed.
    if (buttonLabel == "|<" || buttonLabel == "<<") {
    pagenumber <= 1 ? $Button.addClass('pgEmpty') : $Button.click(function() { buttonClickCallback(destPage); });
    }
    else {
    pagenumber >= pagecount ? $Button.addClass('pgEmpty') : $Button.click(function() { buttonClickCallback(destPage); });
    }
    return $Button;
    }
    // pager defaults. hardly worth bothering with in this case but used as placeholder for expansion in the next version
    $.fn.pager.defaults = {
    pagenumber: 1,
    pagecount: 1
    };
    })(jQuery);
    /*
    ================================================================
    //组件功能:鼠标移上指定目标弹出下拉框 -- by flowerszhong
    //参数说明:
    //target:事件对象Id
    //box:下拉框Id
    //left:以事件对象最上的坐标左偏移量,默认为0;
    //top:以事件对象最上的坐标上偏移量,默认为事件对象的高度
    //overClass:当前状态表格行保持高亮样式
    //on:弹出框是否有箭头
    //arrow:自动调节的指向箭头
    ================================================================
    */
    var dropbox = function(target, box, left, top, overClass, on, hasArrow) {
    var obj, b, p;
    if (typeof target == "object")
    obj = $(target);
    else
    obj = $("#" + target);
    if (typeof box == "object")
    b = $(box);
    else
    b = $("#" + box);
    p = obj.parent();
    if (top == "undefined") top = obj.height();
    var defaults = {
    l: left || 0,
    t: top || 0,
    overClass: overClass || "",
    on: on || "",
    hasArrow: hasArrow || ""
    },
    offset = obj.offset(),
    w = $(window).height(),
    selectSet = function(flag) {
    //在IE6中,防止select控件遮罩下拉框
    if ($.browser.msie && $.browser.version == "6.0") {
    if (flag) {
    $("select").css("visibility", "visible");
    } else {
    $("select").css("visibility", "hidden");
    }
    }
    };
    $(window).resize(function() {
    w = $(window).height();
    offset = obj.offset();
    });
    $("#arrow").click(function() {
    offset = obj.offset();
    });
    //绑定mouseover事件
    obj.bind("mouseover", function() {
    var diff, arrow, scrollTop;
    scrollTop = $(window).scrollTop();
    diff = w - (offset.top - scrollTop);
    if (on && diff < 145) {
    var subTop = 145 - diff;
    b.css({ "display": "block", "left": offset.left + defaults.l + "px", "top": offset.top + defaults.t - subTop + "px" });
    if (hasArrow) {
    arrow = b.children("div")[0];
    var arrTop = 35 + subTop;
    $(arrow).css("top", arrTop);
    }
    } else {
    b.css({ "display": "block", "left": offset.left + defaults.l + "px", "top": offset.top + defaults.t + "px" });
    if (hasArrow) {
    arrow = b.children("div")[0];
    $(arrow).css("top", "35px");
    }
    }
    b.bind("mouseover", function(event) {
    $(this).show();
    selectSet(false);
    if (overClass) { p.addClass(overClass); }
    event.stopPropagation(); //阻止事件冒泡
    });
    b.bind("mouseout", function(event) {
    $(this).hide();
    selectSet(true);
    if (overClass) { p.removeClass(overClass); }
    event.stopPropagation(); //阻止事件冒泡
    });
    if (overClass) { p.addClass(overClass); }
    selectSet(false);
    });
    //绑定mouseout事件
    obj.bind("mouseout", function() {
    b.css("display", "none");
    selectSet(true);
    if (overClass) { p.removeClass(overClass); }
    });
    //debugger;
    };
    GLOBAL.zyh.dropbox = dropbox;
    /*
    ================================================================
    //功能:Toggle Column 表格自定义列通用方法,基于jquery.columnmanager组件,GLOBAL.zyh.dropbox组件
    //参数说明:
    //targetTable:表格Id
    //columnManagerArgument:jquery.columnmanager需要参数
    //btnSetColumn:
    //targetfive:
    //left: 0
    //top: 0
    ================================================================
    */
    GLOBAL.zyh.toggleTableColumn = function(options) {
    var defaults = {
    targetTable: '',
    columnManagerArgument: {},
    btnSetColumn: '',
    targetfive: '',
    left: 0,
    top: 0
    }
    var settings = $.extend({}, defaults, options);
    $('#' + settings.targetTable).columnManager(settings.columnManagerArgument);
    GLOBAL.zyh.dropbox(settings.btnSetColumn, settings.targetfive, settings.left, settings.top);
    }

    下载本文
    显示全文
    专题