将FORM元素更改为其他内容或删除它同时保留所有子元素

时间:2010-10-07 10:17:51

标签: jquery dom-manipulation

我已经将Asp.net MVC与Sharepoint网站集成在一起。它很棒。但我也使用默认的Sharepoint母版页(即~masterurl/default.master)。问题是这个特定的母版页将整个页面包裹在form元素中,而所有Sharepoint页面都只是普通的Asp.net WebForm页面。

我的MVC内容应该有自己的form和我想要提交给服务器的输入元素。 Ajax调用显然有问题。如果我保留原始$("form").serializeArray()元素,则无法使用form。但是正常的回发是有问题的,因为在提交事件上有WebForm功能,他们会向服务器发送太多数据。

我将使用正常的回发以及Ajax回发。主要问题是正常的回发。

所以我有两种可能性,它们应该在$(document).ready()上运行:

  1. 删除表单元素并保留所有其他内容。在jQuery中,它可能意味着将form元素添加到div,将其内容移动到此div,然后删除form
  2. 直接将form元素更改为div。这在浏览器处理方面可能会更快,但我不知道该怎么做。
  3. 因此,如果任何人都可以为2解决方案,并就这两种可能的解决方案提供一些意见:应该做哪一个以及为什么。

    修改

    还有第三种可能性。我可以将我的输入元素创建为neede,但将它们包含在div元素中。当用户想要提交我的表单时(div不是表格)我可以:

    1. 动态调用$("div.form").serializeArray()
    2. 创建表单元素
    3. 使用序列化值填充
    4. 将表格附加到正文
    5. 提交。
    6. 似乎单调乏味但可行。前两个解决方案似乎更简单。

1 个答案:

答案 0 :(得分:1)

如果您通过$.ajax()提交,我只需直接使用.serialize()元素,就像这样:

$.ajax({
  url: "Path/Action",
  type: "post",
  data: $("#someContainer :input").serialize(),
  success: function(data) {
    //do something
  }
});

或更短的$.post()版本:

$.post("Path/Action", $("#someContainer :input").serialize(), function(data) {
  //do something
});

这不需要任何<form>代或其他技巧,只需要普通的jQuery AJAX帖子(或GET,无论需要什么)。