从 DOM 中删除元素并将它们添加回原来的位置
Remove Elements From The DOM And Add Them Back In Where They Were
我有一个模态窗口。我想发生的是在模态打开时从页面中删除某些元素,并在模态关闭后将它们添加回原位。我不想做 display:none,因为这只会隐藏它们,我需要将它们实际从页面中删除。所以我有一些 jQuery 要删除并在计时器之后重新添加它们,仅用于测试......
更新:通过对代码的这些添加,它现在可以在前面抓取元素,然后在相同的元素之后重新添加它。问题是,如果该元素也被删除怎么办?然后它不会重新添加!另外,javascript 事件处理程序不会丢失吗?我正在开发一个插件,所以它应该尽可能少地干扰网站,但 3d 元素在 Safari 中有一个无法绕过的错误。
关于如何在不过多干扰人们网站的情况下暂时删除 3d 元素的任何想法?
$3delements = $('*').filter(function(){return $(this).css('-webkit-transform-style') == 'preserve-3d'});
$3delementsposition = $3delements.prev()
//On modal open
$3delements.remove();
//On modal close
$3delementsposition.after($3delements);
问题是这需要我在 DOM 中指定某个位置让他们回来。我希望元素回到它们所在的地方。如何确保元素不会更改/移动/丢失 .remove 到 .append 上的信息。
-
使用
.detach()
和.append()
删除和重新附加元素,它将保留您的所有事件和数据。 -
如果以与删除元素相反的顺序重新添加元素,则它们都应回退到位
未经测试的代码
var elems3d = $(...);
var elemsRemoved = [];
// removing
elems3d.each(function(i,o) {
var elem = $(o);
elemsRemoved.push({
loc: elem.prev(),
obj: elem.detach()
});
});
// adding back
while (elemsRemoved.length) {
var elem = elemsRemoved.pop();
elem.loc.after(elem.obj);
}
不要删除元素,而是将它们替换为占位符元素(使用 replaceWith
),然后在需要时将占位符替换为原始内容。如下所示:
$3delements = $('*').filter(function(){return $(this).css('-webkit-transform-style') == 'preserve-3d'});
var originals = [];
$3delements.each(function() {
// Clone original, keeping event handlers and any children elements
originals.push($(this).clone(true));
// Create placeholder for original content
$(this).replaceWith('<div id="original_' + originals.length + '"></div>');
});
///
/// Do something asynchronous
///
// Replace placeholders with original content
for (var i in originals) {
$('#original_' + (i + 1)).replaceWith(originals[i]);
}
有关详细信息,请参阅 jQuery 文档中的clone
和replaceWith
。
我已经创建了小提琴。让我知道这是否满足您的要求。
http://jsfiddle.net/mNsfL/12/
相关文章:
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在映射数组中添加换行符
- 正在将数据主题添加到所有项目
- ZeroClipboard-在复制之前添加到值
- 我可以在json对象中添加一个函数吗
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 正在SharePoint 2013母版页中添加JQuery移动文件
- 如何添加浮动和非浮动,其他
- 添加文字和评论功能更新Div
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 在函数中添加数组元素的数值
- 如何将歌曲添加到jPlayer
- 在html Select中添加搜索
- Java脚本时间添加
- FabricJs-限制主对象内添加对象的移动区域
- 删除数组元素并将它们添加回原来的位置
- 从 DOM 中删除元素并将它们添加回原来的位置
- 为什么在原型中添加一个函数不能覆盖JavaScript中原来的函数定义?
- 为什么添加rect然后设置它的左和顶部会导致一个可选择的'ghost'请保持原来的位置