44

我有一个带有表格的 DIV。当用户提交表单并成功提交时,我将表单替换为简单的“现在一切正常”消息:

$("#some_div").html("Yeah all good mate!");

有没有一种好方法可以根据它附带的 HTML 将 div “重置”为“原始状态”?我只能想到实际上做这样的事情:

//before I change the DIV
var originalState = $("#some_div").html();
//manipulate the DIV
//...
//push the state back
$("#some_div").html(originalState);

它看起来不太优雅——我想有一个更好的解决方案,不是吗?

4

10 回答 10

92

我会克隆元素,而不是保存内容。然后使用replaceWith来恢复它:

var divClone = $("#some_div").clone(); // Do this on $(document).ready(function() { ... })

$("#some_div").html("Yeah all good mate!"); // Change the content temporarily

// Use this command if you want to keep divClone as a copy of "#some_div"
$("#some_div").replaceWith(divClone.clone()); // Restore element with a copy of divClone

// Any changes to "#some_div" after this point will affect the value of divClone
$("#some_div").replaceWith(divClone); // Restore element with divClone itself
于 2011-04-05T19:57:43.680 回答
21

您可以使用 data 属性来保存状态而不是变量

$('#some_div').data('old-state', $('#some_div').html());
$('#some_div').html($('#some_div').data('old-state'));
于 2011-04-05T19:56:44.023 回答
5

你正在做的不是最佳的。最好的解决方案是:

当表单成功提交时,只有hide()FORM 元素和show()消息(最初是隐藏的)。然后,稍后,只有show()FORM 元素和hide()消息。

于 2011-04-05T20:02:39.487 回答
4

是的,你拥有的方式就是这样做的方式。DOM 不会保存 DIV 的先前状态,因此您需要自己保存。

于 2011-04-05T19:55:36.200 回答
3

优雅一些?

var originalState = $("#some_div").clone();
$("#some_div").replaceWith(originalState);
于 2011-04-05T19:59:51.490 回答
3

在我看来,最好的方法是使用这个:

var originalState = $("#some_div").clone();
$("#some_div").replaceWith(originalState.clone());

这样,您可以重复使用它来将您的 div 恢复到原始状态,同时保持“originalState”中的数据完好无损。为我工作。

于 2016-09-09T07:06:58.927 回答
2

你基本上有三个选择。

  1. 记住您的原始标记,就像您对originalState上面的变量所做的那样。
  2. 使用 AJAX 重新请求标记。如果你有使用$.ajax()jQuery 中的方法的服务器端代码,你可以很容易地做到这一点。
  3. 导致页面重新加载。
于 2011-04-05T19:56:41.103 回答
0

在 jQuery 中调用empty函数就可以了

$(".div").empty();
于 2018-10-22T16:01:16.207 回答
0

这是我在这个网站上的第一次互动——我还不能发表评论,但这是@Fleuv 对@Josiah Ruddell 回答的评论:

的默认参数.clone()是“false”,它不会克隆事件侦听器。如果你做到了,.clone(true)它也会克隆事件侦听器。我已经对其进行了测试(以及他的其余答案)并且它有效。

w3schools jQuery clone() 方法

于 2019-03-02T18:21:11.640 回答
0
var originalState = $("#some_div").clone(true, true);
$("#some_div").replaceWith(originalState.clone(true, true));
于 2019-09-23T09:44:43.257 回答