2012-04-19 52 views
6

我有一个模式窗口。我想要做的是在模式打开时从页面中删除某些元素,并在模式关闭后将它们添加回原来的位置。我不想显示:无,因为只隐藏它们,我需要它们实际上从页面中删除。所以我有一个jQuery删除,并将其添加回来后,一个计时器只是为了测试...从DOM中删除元素并将其添加回他们所在的位置

更新:随着这些代码的增加,它现在抓取元素之前,然后将其添加回相同的元素。问题是,如果该元素也被删除,该怎么办?然后它不会重新加入!此外,不会在这个JavaScript事件处理程序丢失?我开发了一个插件,所以它应该尽可能少地干扰网站,但是3D元素在Safari中存在一个无法绕开的bug。

任何想法如何我可以暂时删除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他们回来在指定某一个地方,我想元素回来在原来的位置。我如何确保这些元素不会改变/移动/丢失.append上的.remove信息。

+0

指定“位置“ 在这种情况下。它的容器内容中的元素的顺序是什么?他们是深度还是兄弟姐妹?你有轴承,我们可以锚定一个查询,所以我们可以相对位置? – Joseph 2012-04-19 05:31:32

+0

我已经对代码做了一些更改,看看他们是否回答你的问题... – alt 2012-04-19 05:41:27

+0

尽管jQuery中有可能获取DOM中元素的深度和位置,但我认为无法获得确切的位置它的兄弟姐妹中的元素。考虑一下:如果我们预先/附加/删除了兄弟姐妹或者更糟糕的话,那么通常替换内容,那么实际位置现在已经消失了。 – Joseph 2012-04-19 05:47:15

回答

8
  1. 使用.detach().append()删除并重新安装的元素,它会维护所有事件和数据。

  2. 如果以相反的顺序,您删除它们添加元素回来,他们都应该到位回落


未经测试的代码


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); 
} 
5

而不是删除元素,用占位符元素替换它们(使用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]); 
} 

更多信息,请参见clonereplaceWith在jQuery的文档。

-4

我已经创建了小提琴。让我知道这是否满足您的要求。

http://jsfiddle.net/mNsfL/12/

+1

请在回答中加入相关代码,而不是只发布链接! – ThiefMaster 2012-04-19 06:26:09

+3

要求-1的好方法。谁知道未来小提琴是否仍然在线?小提琴非常适合演示代码,但回答问题的代码仍应包含在答案中。 – ThiefMaster 2012-04-19 14:49:43

相关问题