<div> 被 JavaScript 修改后如何“重置”到它的原始状态?

IT技术 javascript jquery html html-manipulation
2021-02-10 23:31:31

我有一个带有表单的 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);

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

6个回答

我会克隆元素,而不是保存内容。然后使用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
这不会克隆事件侦听器,在此处进行测试
2021-03-16 23:31:31
克隆将删除所有jquery事件功能。
2021-03-19 23:31:31
不知道replaceWith,非常好!
2021-03-22 23:31:31
在你的最后一步,有没有办法不改变 divClone 的值?
2021-03-31 23:31:31

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

$('#some_div').data('old-state', $('#some_div').html());
$('#some_div').html($('#some_div').data('old-state'));
我将它与 AJAX 和动态创建的按钮一起使用,这是唯一对我有用的答案。
2021-04-13 23:31:31

你正在做的不是最优的。最好的解决方案是这样的:

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

@abolotnov 将您的 FORM 元素写入字符串将破坏绑定在该表单或其任何祖先元素(如表单字段)上的所有事件处理程序。在表单元素或任何祖先上以编程方式完成的所有其他更改也将丢失。HTML 重写是一个可怕的想法。
2021-03-22 23:31:31
嗯,这有多大好处?我的意思是 - 为什么这不是最佳选择 - 显示/隐藏多少更好?
2021-04-02 23:31:31
@ŠimeVidas 您对使用 .clone(true, true) 有什么想法,它也将克隆数据和事件处理程序,并且还将为克隆元素的所有子元素执行此操作(根据 jQuery API 文档)?
2021-04-02 23:31:31
关于 OP 面临的用例,或者在您的示例中,以防您想要克隆 FORM 元素。
2021-04-08 23:31:31
@jj_ 在什么情况下?
2021-04-11 23:31:31

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

优雅一点?

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