Javascript 为什么jQueryHTML与表单一起使用时与replaceWith类似?

Javascript 为什么jQueryHTML与表单一起使用时与replaceWith类似?,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我有id为的表单推送消息表单,对服务器的ajax调用返回新表单html以替换推送消息表单表单本身上设置的id,如: <form id='push-message-form'>form content</form> 表单内容 ajax响应html看起来是一样的 从jQuery文档中我了解到:html()将替换元素的内容,而replaceWith()将替换实际元素 但我用的是 $('#push-message-form').html('<form id='pus

我有id为
的表单推送消息表单,对服务器的ajax调用返回新表单html以替换<代码>推送消息表单
表单本身上设置的id,如:

<form id='push-message-form'>form content</form>
表单内容
ajax响应html看起来是一样的

从jQuery文档中我了解到:html()将替换元素的内容,而replaceWith()将替换实际元素

但我用的是

$('#push-message-form').html('<form id='push-message-form'>content</form>')
$('#推送消息表单').html('content'))
它取代了表单本身(同时它应该在当前表单中添加另一个表单)

问题是,在这种情况下,为什么html()作为replaceWith()工作

更新

一些答案建议使用append,如果不清楚,请道歉。但我不想附加。我想用从服务器返回的新表单替换表单(保留其id),并且replaceWith()可以很好地工作


问题是为什么html()在这里也起作用。因为它应该只替换内容,但也替换标记。

您应该使用
.append()
将内容添加到容器中,调用
。html()
将用您输入的值替换容器中的任何内容:

此外,您还试图使用相同的
id
附加表单,因此应该使用类或更改id名称

这:

$(“#推送消息表单”).append('content')
与此相反:

$('#push-message-form').html('<form id='push-message-form'>content</form>')
$('#推送消息表单').html('content'))
.html()
准确地清除元素中的html,然后将新的html放入其中。而您需要
.append()
将新的HTML添加到当前HTML中

$('#push-message-form').append('<form id='new-form-id'>content</form>')
$(“#推送消息表单”).append('content')

这将在其内部嵌套一个具有相同ID的新表单。这不符合HTML,会导致问题。我知道,但OP就是这么做的,更新我的帖子以反映问题that@AlmasSapargali您必须以某种方式重新创建这个问题,在任何情况下html都不会取代包装器。除非您使用与表单父级相同的
id
,并且正在触发该id,而不是实际的
表单
element@jmore009我很确定那是真的,我也在想。虽然在另一个表单上,html()会在其中创建另一个表单(错误,但应为)。尝试添加一个具有不同ID的表单。使用相同ID两次会破坏html合规性。为什么要这样做?。为什么要在以前的表单中附加具有相同ID的表单。我建议使用append()方法并使用新的表单ID。@Ding请查看我的更新。
$('#push-message-form').append('<form id='new-form-id'>content</form>')