如何用ajax响应替换html元素?

IT技术 javascript php jquery html ajax
2021-03-07 06:51:25

如何从 ajax 响应中替换 html 元素?我所知道的是删除元素,如何用 ajax 响应替换删除的标签?例如:

我有这样的代码:

<ul id="products">
...............
</ul>

当我点击一个按钮时,ajax 调用被发送到 codeginter 控制器,在那里我接收从数据库中提取的新数据并在另一个视图中呈现,该视图从 ul 开始并在关闭 ul 时结束。

在 ajax 成功函数中,我这样做:

$('#products').remove();
//What to do now here to replace the removed portion with response of ajax?
6个回答

您可以使用 replaceWith(参见:http ://api.jquery.com/replaceWith/

喜欢: $('#products').replaceWith(response);

它正在工作,但替换的内容已破裂/格式不正确。让我告诉您,新视图对 HTML 略有更改。较旧的以网格格式显示结果,而较新的以列表格式显示结果。对于 replaceWith 函数,新旧 HTML 的结构必须完全相同吗?
2021-05-03 06:51:25
试试吧$('#products').replaceWith($(response));如果样式看起来不同,请检查您的 CSS 选择器。它们必须相同。
2021-05-11 06:51:25

假设您要更换产品,如果您从控制器获取格式化的 HTML,那么只需执行此操作

success : function(response) {
$('#products').html(response);
}

无需移除 <ul> 标签。您可以简单地用新的 < li > s 替换旧的 < li > s

编辑:pascalvgemert 提到的 replaceWith 函数更好https://stackoverflow.com/a/19527642/2887034

在它周围创建一个包装器:

<div id="wrapper">
    <ul id="products">
    ...............
    </ul>
</div>

现在您可以执行以下操作:

$('#wrapper').html(responseData);

之前可以使用JQuery

$('#products').before("yourhtmlreceivedfromajax").remove();

或者只是用html替换div的内容 $('#products').html("yourhtmlreceivedfromajax");

如果您的主 div 位于另一个具有另一个 id 的容器内,您可以这样做:

基于这种结构:

<div id="mainContainer">
    <ul id="products">
         ...............
    </ul>
</div>

使用 jquery for ajax 的 Javascript 代码

$.ajax({
  url: "action.php",
  context: document.body
}).done(function(response) {
  $('#products').remove(); // you can keep this line if you think is necessary
  $('mainContainer').html(response);
});