2013-05-07 63 views
1

我正在使用insertAfter函数移动div元素的位置(和父母)。 事情是这样的:存储DIV元素的原始父代

$('.annotation i').click(function(){ 
    $('.annotation').find('.comment').insertAfter('#container'); 
}); 

我想知道是否有可能以某种方式与原始亲本存储,以便之后的另一个用户动作的div元素移回原来的位置(原母公司下)。

谢谢。

+0

什么火焰的意思是:。'$( 'yourDiv ')隐藏()的clone()appendTo(' #集装箱 ')显示()addClass(' 克隆');'会抢。 yourDiv,隐藏它,克隆它,追加,显示克隆并向克隆中添加一个类(这样你就可以在后面执行'$('。yourDiv.clone')' – RaphaelDDL 2013-05-07 14:25:49

+0

@RaphaelDDL这个元素在移动后会遭到修改。它包含一个textarea,因此我需要再次克隆它,删除原来的一个,然后添加这个返回到原来的状态。是不是再简单一点呢? – Alvaro 2013-05-07 14:31:14

+1

你可以做'$( '.yourDiv')。replaceWith('。yourDiv.clone')。show();'当你需要回到第一个地方时(显示是因为yourDiv在我们克隆的时候被隐藏) – RaphaelDDL 2013-05-07 17:25:12

回答

2
var parent = $('.annotation').find('.comment').parent(); 

会给你的.comment类的元素的父母。

你提到存储它的位置。你可能会发现JQuery Index有帮助。以类似的方式存储父级索引或存储特定.comment元素的位置以供以后使用。

1

您可以创建元素的副本,并隐藏原始:

$e = $('element'); 
$c = $e.clone(); 
$e.hide(); 

然后你就可以摧毁移动的元素,并再次显示原始:

$e.show(); 
$c.remove(); 

或替换原有移动的一个:

$e.replaceWith($c); 

http://api.jquery.com/clone

如果原始元素有一个ID属性,你会想更改或删除它的克隆,以及让所有的元素保留的唯一ID:

$c.attr('id','new-unique-string'); 
// or 
$c.removeAttr('id'); 
+0

这是克隆而不是移动它,如果有的话? – Alvaro 2013-05-07 14:26:58

+0

您根本不必存储父项,因为原始元素正是您离开它的地方。 – Blazemonger 2013-05-07 14:28:14

+0

@Steve如果您需要隐藏克隆并将其移回原始位置(也称为“将div元素移回到原始位置”,您说过),则可以保留原始位置。 – RaphaelDDL 2013-05-07 14:28:57

2

这一个存储到原来的父级的引用使用.data()函数。 。

$('.annotation i').click(function(){ 
    $('.annotation').find('.comment').each(function() { 
     $(this).data('oparent', $(this).parent()); 
     $(this).insertAfter('#container'); 
    }); 
}); 

function anotherUserAction(comment) { 
    comment.appendTo(comment.data('oparent')); 
}