JQATT全称(JqueryAjaxTreeTable)控件

来源:互联网 发布:5s后知摄像头微距模糊 编辑:程序博客网 时间:2024/06/04 19:00

效果图如下

 

另外两个图片也一起传上来吧,各位另存一下就好

 

(function (JQ) {    //JQ.fn.extend({    JQ.fn.JQAjaxTreeTable = function (Options) {        var _thisTable = JQ(this);        /*        * Options的属性 Options.dataPrimaryKey //数据的主键名 Options.fnFormatData        * //格式化数据显示效果的方法 Options.addImgSrc //+号图片的地址 Options.subImgSrc        * //-号图片的地址        */        Options.dataPrimaryKey = Options.dataPrimaryKey || "id";        Options.addImgSrc = Options.addImgSrc || "/images/p.gif";        Options.subImgSrc = Options.subImgSrc || "/images/s.gif";        Options.sendToServerData = {};        /**        * 格式化tr内容的方法 data 是后台传输过来的参数        */        Options.fnFormatData = Options.fnFormatData|| function (itemdata, index, formatMethod) {    for (var p in itemdata) {        s += formatMethod("<td>{0}<td>", itemdata[p]);    }    return s;};        // 渲染子节点        function RenderChild(responseText) {            var $thisTR = this.$tr;            var CurrentRowData = this.CurrentRowData; // 被点击行的数据,通过ajax的context传递过来            var CurrentRowId = CurrentRowData[Options.dataPrimaryKey]; // 被点击行的主键值            var parendids = $thisTR.attr("parentid") || "_p0"; // 被点击行的父辈            var re = /\_p/ig; // 创建正则表达式模式。            var r = parendids.match(re); // 尝试去匹配搜索字符串。            var level = r.size(); // 总共有几个_p 也就是有几级            var result = eval("( " + responseText + ")"); // 把客户端返回的字符串解析一下.            var $treeimg = $thisTR.find("img.treeimg");            //判断是 -号图片就直接收缩起来.            if ($treeimg.attr("src") == Options.subImgSrc) {                //收缩操作,找到所有的字系列                $treeimg.attr("src", Options.addImgSrc);                var childtr = _thisTable.find("tr[parentid*='_p" + CurrentRowId + "_p']");                childtr.remove();            } else {                // 展开操作                $treeimg.attr("src", Options.subImgSrc);                for (var i = 0; i < result.length; i++) {                    var rowdata = result[i];                    if (isempty(rowdata)) continue;                    var newtr = format("<tr parentid='{0}_p{1}' ></tr>",parendids,                                rowdata[Options.dataPrimaryKey]);                    newtr = JQ(newtr);                    newtr.data(rowdata); // 把数据绑定到tr上                    var s = format("<td>" +                        "<span style='width:{1}px;display: inline-block;text-align: right;'><img alt='' class='treeimg'  src='{0}' /></span>" +                        "</td>", Options.addImgSrc, level * 20);                    s += Options.fnFormatData(rowdata, i, format);                    newtr.append(s);                    $thisTR.after(newtr);                    // 给新增加的行添加上单击事件处理方法                     newtr.find("img.treeimg").click(onImgClick);                }            }        }        // 使用示例        // var template = "{0}欢迎你在{1}上给{0}留言,交流看法";        // var author = "晴枫";        // var site = "枫芸志";        // var msg = String.format(template, author, site);        function format(src) {            if (arguments.length == 0)                return null;            var args = Array.prototype.slice.call(arguments, 1);            return src.replace(/\{(\d+)\}/g, function (m, i) {                return args[i];            });        };        function isempty(obj) {            if (obj == null || obj == "" || obj == undefined) {                return true;            }            for (var p in obj) {                return false; //有属性就是false            }            return true;        }        // 当+号被点击时触发        function onImgClick() {            // this 指向的是当前被点击的+号图片            var $thisTR = JQ(this).parents("tr");            var CurrentRowData = $thisTR.data();            if (isempty(CurrentRowData)) {                CurrentRowData = { dataId: $thisTR.attr("dataid") };            } else {                CurrentRowData.dataId = CurrentRowData.Id || CurrentRowData.dataId;            }            // 加个参数OptionMethod=GetChildrenTrData一起传到后台            CurrentRowData.OptionMethod = "GetChildrenTrData";            //每次都传递到后台的参数            for (var p in Options.sendToServerData) {                CurrentRowData[p] = Options.sendToServerData[p];            }            var d = {                type: "post",                context: {                    "$tr": $thisTR,                    "CurrentRowData": CurrentRowData                }, // 把当前点击的Tr 传递到ajax回调函数中                data: CurrentRowData,                success: RenderChild            };            if (Options.url) {                d.url = Options.url;            }            JQ.ajax(d);         }        function fristLoad() {            var $fristtr = _thisTable.find("tr:first");            var CurrentRowData = {};            CurrentRowData.OptionMethod = "GetChildrenTrData";            CurrentRowData.dataId = 0;            var d = {                type: "post",                                context: {                    "$tr": $fristtr,                    "CurrentRowData": CurrentRowData                }, // 把当前点击的Tr 传递到ajax回调函数中                data: CurrentRowData,                success: RenderChild            };            if (Options.url) {                d.url = Options.url;            }            JQ.ajax(d);        }        fristLoad();        _thisTable.find("tr img.treeimg").click(onImgClick);    }    //   });})(jQuery || JQ || $);


 

 控件初成,代码简单.就是为了给你的table加上树的功能...为了提高客户端效率,,采用ajax技术从后台动态读取数据..

控件本身使用方法如下;

 html部分

<div id="mainContent">  <table width="100%" id="tablist"  cellspacing="0" cellpadding="0" border="1" bordercolorlight="#DDDDDD" class="datatable" bordercolordark="#FFFFFF">     <tr>     <th width="5%">序号</th>     <th width="65%">类型名称</th>     <th width="10%">实体产品</th>     <th width="20%">操作</th>     </tr>  </table> </div>

就是部分

 <script type="text/javascript">         JQ("#mainContent table").JQAjaxTreeTable({            addImgSrc: "../images/p.gif",            subImgSrc: "../images/s.gif",            url:"后台ajax页面取数据的地方",            dataPrimaryKey:"Id",            fnFormatData: function (itemdata, index, formatMethod)             {                return formatMethod("<td><input type='hidden' value='{0}' >{2} </td>" +                                        "<td>{3} </td>" +                                    "<td><a href=product_type_edit.aspx?id={4}>编辑</a> <a href='#' onclick='Del(this,{4})'>删除</a> <a href='product_type_edit.aspx?parentId={4}'>添加子系列</a> </td> "                                    , itemdata.id                                    , 0                                    , itemdata.TypeName                                    , itemdata.IsEntityProduct                                    , itemdata.Id);            }        });     </script>


 后台提供数据的方法如下依asp.net为例,,当然改成java也能用,返回的格式一定是json数据才好处理哦,至于怎么拼装成json各位就自己发挥吧,微笑

 

protected void Page_Load(object sender, EventArgs e){//这个控件会传递一个参数dataId到后台,因为id用的太多了,容易混乱所以就用dataId了..            string Id = Request["dataId"];//再传递第二个参数OptionMethod其值永为GetChildrenTrData            if (Request["OptionMethod"] == "GetChildrenTrData")            {                GetChildren(Id);                Response.End();                return;            }} private void GetChildren(string id)        {            Shop.BLL.Product.ProductType data = new Shop.BLL.Product.ProductType();            List<Model.Product.ProductType> list1 = data.GetAllByWhere("ParentId = '" + id + "' order by id desc");            int ln = list1.Count;            string[] js = new string[ln];            for (int i = 0; i < ln; i++)            {                js[i] = string.Empty;                Model.Product.ProductType pt = list1[i];                js[i] += string.Format("TypeName:'{0}',ParentId:'{1}',IsEntityProduct:'{2}',Id:'{3}'"                                         , pt.TypeName                                        , pt.ParentId                                        , (pt.IsEntityProduct.ToString() == "1" ? "是" : "否")                                        , pt.Id);                //  js[i] +=string.Format("<a href=product_type_edit.aspx?id={0}>编辑</a><a href='#' onclick='Del({0})'>删除</a> <a href='product_type_edit.aspx?parentId={0}'>添加子系列</a>", pt.Id.ToString());                // js[i].AppendFormat("<a href=product_type_edit.aspx?id={0}>编辑</a>");            }            Response.Write("[{" +                                string.Join(" },{ ", js) +                           "}]");        }


 

原创粉丝点击