调用serialize()时更改元素的名称

时间:2012-01-20 16:32:50

标签: jquery serialization

有没有办法修改被序列化的元素的名称,但仅限于序列化数据?我可能不会那么问,所以这就是我的意思。

意思是,如果我有一个控件:

<asp:dropdownlist id="ddTest" runat="server">
    <asp:listitem value="1" name="1" />
    <asp:listitem value="2" name="2" />
</asp:dropdownlist>

我将其序列化:

var x = $("form").serialize();
x会出现像:

ddTest=2

所以,我的问题是,如果不更改控件的名称,我怎样才能让x出来像:

TestID=2

这可能吗?

2 个答案:

答案 0 :(得分:3)

这可能有用。

  1. 使用serializeArray将表单序列化为如下所示的数组:

    [{ name: "field_name", value: "field_value" }, ...]
    
  2. 通过循环生成的数组来修改正确的name属性。

  3. 使用$.param正确地对数组进行字符串化。

    $("#testform").submit(function (e) {
        var values = $(this).serializeArray()
            , found = false
            , i
            , serialized;
    
        e.preventDefault();
    
        for (i = 0; i < values.length && !found; i++) {
            if (values[i].name == "field1") { 
                // or whatever field you'd like to replace
                values[i].name = "new_field_name";
                found = true;
            }
        }
    
        // serialized string with new names.
        serialized = $.param(values);
    });
    
  4. 示例: http://jsfiddle.net/X6SV8/

答案 1 :(得分:0)

您可以尝试克隆节点,更改克隆节点中的信息,对其进行序列化,然后删除克隆。

http://api.jquery.com/clone/