jQuery数据显示插件整合

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

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

其中涉及到的插件主要有:

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 = $('<ul class="pages"></ul>');

        // add in the previous and next buttons
        $pager.append(renderButton('|&lt;', pagenumber, pagecount, buttonClickCallback)).append(renderButton('&lt;&lt;', 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 = $('<li class="page-number">' + (page) + '</li>');

            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('&gt;&gt;', pagenumber, pagecount, buttonClickCallback)).append(renderButton('&gt;|', pagenumber, pagecount, buttonClickCallback));

        $pager.append('<li class="pgNone">共' + pagecount + "页</li>");

        //        if (rowcount != undefined) {
        //            $pager.append('<li class="pgNone">共' + rowcount + "条记录,最多显示600条</li>");
        //        }
        if (rowcount != undefined) {
            $pager.append('<li class="pgText">&nbsp;' + rowcount + '条记录&nbsp;</li>');
        }

        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 = $('<li class="pgNext">' + buttonLabel + '</li>');

        var destPage = 1;

        // work out destination page for required button type
        switch (buttonLabel) {
            case "|&lt;":
                destPage = 1;
                break;
            case "&lt;&lt;":
                destPage = pagenumber - 1;
                break;
            case "&gt;&gt;":
                destPage = pagenumber + 1;
                break;
            case "&gt;|":
                destPage = pagecount;
                break;
        }

        // disable and 'grey' out buttons if not needed.
        if (buttonLabel == "|&lt;" || buttonLabel == "&lt;&lt;") {
            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);
}

时间: 2024-09-18 17:21:46

jQuery数据显示插件整合的相关文章

jQuery数据显示插件整合实现代码_jquery

显示表格数据会涉及到一些东西,如字段显示隐藏,数据状态,分页之类. 由于我们公司的产品涉及到很多的表格数据显示,而且每张表的字段数都很多,在工作过程中(几任同仁的努力),整合出一套自认为较为轻巧的方案.如图: 其中涉及到的插件主要有:jQuery.columnmanager.expand.js(扩展columnmanager)jQuery.dropbox.js(自已写的)jQuery.pager.expand.js(扩展pager) jQuery.cookie.js 其中pager.expand

jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)_jquery

理由:jquery简单,兼容性好且容易封装.废话不多说,马上开始我们的Jquery插件编写吧.应该有很多人写过类似的插件,我也是有些模仿flexGrid的形式. 需求:GridView显示数据,无刷新分页,无刷新排序,无刷新过滤(搜索数据),基于ASP.NET(我们这里有ashx一般处理文件来实现). 使用到技术:asp.net2.0, jquery,css 首先写的是jquery插件方面,使用的核心函数还是jquery的ajax函数,方便快捷. 复制代码 代码如下: $.ajax({ type

新的jQuery国际化插件的原型

网页制作Webjx文章简介:新发布的jQuery国际化插件. jQuery国际化插件可以让你在JavaScript代码中轻松地处理不同文化之间的数字.货币和日期格式.例如,你可以使用这个插件正确地显示一个国家的货币符号 上个月,我写了一篇关于微软如何在向jQuery贡献代码的文章,也谈到了在第一批贡献的代码中的一些功能:jQuery模板和数据链接支持. 今天,我们发布了一个新的jQuery国际化插件的原型,你可以在你的JavaScript程序中引用这个插件添加国际化功能.插件涵盖了超过350种文

jqPlot jQuery绘图插件的使用_jquery

jqPlot是一个jQuery绘图插件,可以利用它制作漂亮的线状图和柱状图.jqPlot支持为图表设置各种不同的样式.提供Tooltips,数据点高亮显示等功能. 官网:http://www.jqplot.com/ 这里贡献上中文教程,基本上所有的api都很齐全,供有需要的童鞋们瞧瞧,更重要的是作为自己滴收藏~~哦耶耶~ jqPlot整的来说有三个地方需要配置.格式如: $.jqplot('target', data, options);target:要显示的位置.data:显示的数据.opti

jQuery UI插件实现百度提词器效果_jquery

本文实例为大家分享了jQuery自动文字提示功能,供大家参考,具体内容如下 需要在项目中实现动态添加,删除输入框,每个框里面都要有文字提示. js部分: //自动完提示 function tip(obj) { $( obj ).autocomplete({ minLength: 0, source: function (request, response) { //alert('dsada'); var title = $('#test1').val(); $.ajax({ url: "HotL

推荐几个不错的jQuery图表插件,让你的报表更清晰动感

很多时候我们需要在网页中显示数据统计报表,从而能很直观地了解数据的走向,更好地帮助决策分析.今天就给大家分享几个个人觉得好用的jQuery图表插件,这几个图表插件使用起来非常方便,而且挺灵活的,相信大家会喜欢. jqPlot(中文API说明及示例和源码)推荐 jqPlot是一款基于jquery类库的图标绘制插件.通过jqPlot可以在网页中绘制线状.柱状.饼状等多种样式图表 Google Chart(中文API详解) 利用Google Chart API可以动态地生成图表图形,例如在地址栏中输入

jQuery表格插件:帮助Web设计者驾御HTML表格

本文搜集了大量 jQuery 表格插件,帮助 Web 设计者更好地驾御 HTML 表格,你可以对表格进行横向和竖向排序,设置固定表头,对表格进行搜索,对大表格进行分页,对表格进行滚动,拖放操作等等.这些插件很多都包含详细的教程. jQuery 表格插件 Flexigrid – Web 2.0 Javscript Grid for jQuery - 可变列宽,自动适应表头宽度,可通过 Ajax 连接 XML 数据源,类似 Ext Grid,但基于 jQuery 因此更轻量小巧. Chromatab

webjx收集45个jQuery导航插件和教程

45个jQuery 导航插件及教程.新用户访问一个网站的最初15-20妙会对他们对网站的喜好影响很大,促使他们决定去留.所以开发一个直观易用,风格恰当的导航帮助用户开始是非常重要的.这篇文章列出的这些教程不仅体现了jQuery的强大,也展示了导航创意设计的众多可能. Horizontal Menu Navigation Plugins and Tutorials Mega Drop Down Menu w/ CSS & jQuery DemoAccording to usability expe

jQuery验证插件

学习要点: 1.使用 validate.js 插件 2.默认验证规则 3.validate()方法和选项 4.validate.js 其他功能 验证插件(validate.js),是一款验证常规表单数据合法性的插件.使用它,极大的解放了在表单上繁杂的验证过程,并且错误提示显示的完善也增加了用户体验.   一.使用 validate.js 插件 官网下载:http://bassistance.de/jquery-plugins/jquery-plugin-validation最重要的文件是vali