table动态添加、删除tr

在Web网页中动态为table添加或删除数据行是很常见的需求,实现这一效果有很多种方法,这里只介绍一种,不过在写这一解决方法的时候我感受到了熟练使用Jquery的重要性。
Html代码:

<style type="text/css">
    table {
        border-collapse: collapse;
    }

    td {
        border: 1px solid #000000;
        padding: 5px 5px;
        text-align: center;
    }
</style>
<div>
    <input type="button" id="btnAddTr" onclick="AddTr()" value="添加行"/>
    <input type="button" id="btnSave" onclick="SaveInfo()" value="保存"/>
    <table id="firsttb">
        <thead>
            <tr>
                <td>姓名</td>
                <td>年龄</td>
                <td>联系方式</td>
                <td>地址</td>
                <td>操作</td>
            </tr>
        </thead>
        <tbody id="datalist">
            <tr>
                <td>蝈蝈</td>
                <td>18</td>
                <td>18233177777</td>
                <td><input type="text" name="address" value="" /></td>
                <td><a name="removetr" onclick="RemoveTr(this)">删除</a></td>
            </tr>
            <tr>
                <td>果果</td>
                <td>16</td>
                <td>18233188888</td>
                <td><input type="text" name="address" value="" /></td>
                <td><a name="removetr" onclick="RemoveTr(this)">删除</a></td>
            </tr>
            <tr>
                <td>郭郭</td>
                <td>18</td>
                <td>18233199999</td>
                <td><input type="text" name="address" value="" /></td>
                <td><a name="removetr" onclick="RemoveTr(this)">删除</a></td>
            </tr>
        </tbody>
    </table>
</div>

Jquery代码:

<script type="text/javascript">
    function AddTr() {
        //1.【普通写法1】创建一个<tr></tr>并把它加入到datalist
        //$("<tr><td>新增</td>" +
        //      "<td>16</td>" +
        //      "<td>13067899999</td>" +
        //      "<td><input type=\"text\" name=\"address\" value=\"\"/></td>" +
        //      "<td><a name=\"removetr\" onclick=\"RemoveTr(this)\">删除</a></td></tr>").appendTo("#datalist");

        //2.【普通写法2】创建一个<tr></tr>并把它加入到datalist
        //$("#datalist").append("<tr><td>新增</td>" +
        //                          "<td>16</td>" +
        //                          "<td>13067899999</td>" +
        //                          "<td><input type=\"text\" name=\"address\" value=\"\"/></td>" +
        //                          "<td><a name=\"removetr\" onclick=\"RemoveTr(this)\">删除</a></td></tr>");

        //3.【连缀写法1】创建一个<tr></tr>并把它加入到datalist
        //$("<tr></tr>").append("<td>新增</td>")
        //    .append("<td>16</td>")
        //    .append("<td>13067899999</td>")
        //    .append("<td><input type=\"text\" name=\"address\" value=\"\"/></td>")
        //    .append("<td><a name=\"removetr\" onclick=\"RemoveTr(this)\">删除</a></td>")
        //    .appendTo("#datalist");

        //4.【连缀写法2】创建一个<tr></tr>并把它加入到datalist
        $("<tr></tr>").append("<td>新增</td>")
            .append("<td>16</td>")
            .append("<td>13067899999</td>")
            .append("<td><input type=\"text\" name=\"address\" value=\"\"/></td>")
            .append("<td><a name=\"removetr\">删除</a></td>")
            .appendTo("#datalist")
            .find("a[name=removetr]")
            .click(function() {
                RemoveTr(this);
            });
    }

    function RemoveTr(_this) {
        var $trNode = $(_this).parent().parent();
        var textContext = $trNode.find("td:first").text().trim();
        var flag = confirm("确定删除\"" + textContext + "\"吗?");
        if (flag) {
            $trNode.remove();
        }
    }

    function SaveInfo() {
        if (HaveNullAddress() == "true") {
            alert("地址不能为空!");
            return;
        }
        var json = FormatDatalistToJson();
        $.ajax({
            type: "post",
            url: "Handler1.ashx",
            data: { func: "saveInfo", data: json },
            success:function(data) {
                var jsonString = eval('(' + data + ')');
                alert(jsonString.Success);
                alert(jsonString.Message);
            }
        });
    }

    function FormatDatalistToJson() {
        var $trs = $("#datalist tr");
        var json = '[';
        $trs.each(function(i, tr) {
            json += '{';
            json += '"Name":"' + $(tr).find("td:eq(0)").text() + '",';
            json += '"Age":"' + $(tr).find("td:eq(1)").text() + '",';
            json += '"Phone":"' + $(tr).find("td:eq(2)").text() + '",';
            json += '"Address":"' + $(tr).find("input[name=address]").val() + '"';
            json += '},';
        });
        if (json.length > 0) {
            json = json.substring(0, json.length - 1);
        }
        json += "]";
        return json;
    }

    function HaveNullAddress() {
        var flag = "false";
        var addressInputs = $("#datalist input[name=address]");
        addressInputs.each(function(i, addressInput) {
            if ($(addressInput).val().trim() == "") {
                flag = "true";
                return false;//相当于break;
                //return;    //相当于continue;
            }
        });
        return flag;
    }
</script>

Handler1.ashx后台代码:
代码中所用的JsonHelper类来源于http://blog.csdn.net/xiaouncle/article/details/52279060,有需要的同学可以看一下。

public class Handler1 : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
        string result = "";
        string func = context.Request["func"];
        string data = context.Request["data"];
        switch (func)
        {
            case"saveInfo":
                result = SaveInfo(data);
                break;
            default:
                break;
        }
        context.Response.Write(result);
    }

    private string SaveInfo(string data)
    {
        Result result = new Result();
        try
        {
            List<Person> persons = JsonHelper.JsonDeserialize<List<Person>>(data);
            result.Success = true;
            result.Message = "序列化成功!";
        }
        catch (Exception ex)
        {
            result.Success = false;
            result.Message = "序列化失败!";
        }
        //return JsonHelper.JsonSerializer(result);
        return new JavaScriptSerializer().Serialize(result);
    }
}
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Phone { get; set; }
    public string Address { get; set; }
}
public class Result
{
    public bool Success { get; set; }
    public string Message { get; set; }
}

如果在后台使用Dictionary存储返回结果,需要注意:

private string SaveInfo(string data)
{
    Dictionary<string, object> dict = new Dictionary<string, object>();
    try
    {
        List<Person> persons = JsonHelper.JsonDeserialize<List<Person>>(data);
        dict.Add("Success",true);
        dict.Add("Message", "序列化成功!");
    }
    catch (Exception ex)
    {
        dict.Add("Success", true);
        dict.Add("Message", "序列化成功!");
    }

    //序列化之后的结果为:"[{"Key":"Success","Value":true},{"Key":"Message","Value":"序列化成功!"}]"
    //return JsonHelper.JsonSerializer(dict);

    //序列化之后的结果为:"{"Success":true,"Message":"序列化成功!"}"
    return new JavaScriptSerializer().Serialize(dict);
}
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

changuncle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值