Jquery 学习之路(五)grid绑定模板

  最近在使用mvcpager时发现ajax分页需要使用Partial来实现,而且使用起来还是觉得不太方便。突然想自己做一个mvc的ajax分页,但是如果table直接用js输出就不好维护了。

angularJS有一个ng-repeat属性,可以重复输出html,觉得这个方式不错,所以就有了下面这个方法。

  我的模板主要是使用了2个自定义属性xs-repeat(根据此id绑定),xs-template(进行模板隐藏和与普通绑定区分)。

  目前只能绑定json格式,而且此方式不易于seo,但是作为后台可行,目前已经实现与js+ajax结合分页。

  下面是我的代码,可以直接保存为html格式,运行即可。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.3.0/css/bootstrap.min.css">
    <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="http://apps.bdimg.com/libs/bootstrap/3.3.0/js/bootstrap.min.js"></script>
    <script src="../Script/jquery-1.9.1.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $("[xs-template]").hide();
            $("a").click(function () {
                $("li").removeClass("active");
                $(this).parent().addClass("active");
                Change($(this).text());
            });
            Change(1);
        });

        function bindRepeat(repeatid, data) {
            $("[xs-repeat='" + repeatid + "']").not("[xs-template]").remove();
            var template = $("[xs-template][xs-repeat='" + repeatid + "']").prop("outerHTML");
            var arrMatch = template.match(/{{[^{]*}}/g);//{{ID}}匹配
            var html = "";
            for (var i = 0; i < data.length; i++) {
                var thisHtml = template.replace("xs-template=\"\"", "");
                for (var j = 0; j < arrMatch.length; j++) {
                    var columnName = $.trim(arrMatch[j].replace(/{|}/g, ""));
                    var regColumn = new RegExp(arrMatch[j], "g");
                    thisHtml = thisHtml.replace(regColumn, data[i][columnName]);
                }
                html += thisHtml;
            }
            $("[xs-template][xs-repeat='" + repeatid + "']").after(html);
            $("[xs-repeat='" + repeatid + "']").not("[xs-template]").show();
        }

        function Change(page) {
            var txt = "[{ID:'xxx',Name:'first" + page + "',Sex:'dddd',Tel:'123456789'}";
            for (var i = 1; i < 9; i++) {
                txt += ",{ID:'123" + page + i + "',Name:'张三" + page + i + "',Sex:'男" + page + i + "',Tel:'123456789" + page + i + "'}";
            }
            txt += "]";
            var obj = eval("(" + txt + ")");

            bindRepeat("mytable", obj)
        }
    </script>
</head>
<body>
    <table class="table table-bordered table-hover">
        <thead>
            <tr>
                <th>编号</th>
                <th>姓名</th>
                <th>性别</th>
                <th>电话号码</th>
            </tr>
        </thead>
        <tbody>
            <tr xs-repeat="mytable" xs-template>
                <td><a href="javascript:void(0)" onclick="alert('{{ID}}')">{{ID}}</a></td>
                <td>{{Name}}</td>
                <td>{{Sex}}</td>
                <td>{{Tel}}</td>
            </tr>
        </tbody>
    </table>
    <ul class="pagination">
        <li class="active"><a href="javascript:void(0)">1</a></li>
        <li><a href="javascript:void(0)">2</a></li>
        <li><a href="javascript:void(0)">3</a></li>
        <li><a href="javascript:void(0)">4</a></li>
        <li><a href="javascript:void(0)">5</a></li>
        <li><a href="javascript:void(0)">6</a></li>
        <li><a href="javascript:void(0)">7</a></li>
        <li><a href="javascript:void(0)">8</a></li>
        <li><a href="javascript:void(0)">9</a></li>
        <li><a href="javascript:void(0)">10</a></li>
    </ul>
</body>
</html>

截图效果:

 

posted @ 2015-01-28 00:24  清风君  阅读(1605)  评论(5编辑  收藏  举报