2016-01-06 71 views
0

我想不出如何以最好的方式实现这一目标: 比方说,我有:重新定位元素与jQuery

<div class="parent"> 
 
    <div class="child"></div> 
 
</div> 
 
<div class="parent"> 
 
    <div class="child"></div> 
 
</div> 
 
<div class="parent"> 
 
    <div class="child"></div> 
 
</div>

我想移动每一个“孩子'在它的父母之后。

<div class="parent"></div> 
 
<div class="child"></div> 
 
<div class="parent"></div> 
 
<div class="child"></div> 
 
<div class="parent"></div> 
 
<div class="child"></div>

我怎样才能做到这一点?

更新:此外,我如何排除有某些属性的父母?例如,我需要排除那些data-anchor = 2和data-anchor = 3的我无法弄清楚如何做到这一点。

回答

1
$(".parent").each(function(){ 
    $(this).after($(".child", this)); 
}); 

的jsfiddle后的位置:https://jsfiddle.net/TrueBlueAussie/onsb12jx/

注:$(".child", this)只是一个较短的$(this).find(".child")版本

剔除元件可以使用.not():not()或一个过滤器:

例如使用.not()

$(".parent").not('[data-anchor=2],[data-anchor=3]').each(function(){ 
    $(this).after($(".child", this)); 
}); 

或使用:not伪选择

$(".parent:not([data-anchor=2],[data-anchor=3])").each(function(){ 
    $(this).after($(".child", this)); 
}); 

或使用filter()功能

$(".parent").filter(function(){ 
     return $(this).data('anchor') == "2" || $(this).data('anchor') == "3"; 
    }).each(function(){ 
    $(this).after($(".child", this)); 
}); 
+0

您好,感谢的元素检查结构!我喜欢这个解决方案!你能帮我一下吗?我怎么能排除那些有某些属性的父母?例如,我需要排除具有data-anchor = 2和data-anchor = 3的数据我不知道如何执行此操作。 – AlexTazh

+0

伙计,你是最棒的! '不'是美丽的!我不知道这件事。 – AlexTazh

0

使用

$(".parent").each(function() { 
    $(this).after($(this).find(".child")); 
}); 

after()会帮助你的元素选定的元素

1

您可以通过循环在.child元素,并使用insertAfter()将它们放置后,实现这一目标他们最亲密的父母.parent元素:

$('.parent .child').each(function() { 
    $(this).insertAfter($(this).closest('.parent')); 
}); 

Example fiddle

0

您可以使用.after(fn)方法与函数作为参数,返回所期望的行为,它的好处是不明确的使用一个循环,这样,它会为你在内部做:

$('.parent').after(function() { 
 
    return $('.child', this); 
 
});
.parent{border:solid red 3px;} 
 
.child{border:solid 3px green; margin:3px 0;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="parent"> 
 
    <div class="child">child</div> 
 
    parent 
 
</div> 
 
<div class="parent"> 
 
    <div class="child">child</div> 
 
    parent 
 
</div> 
 
<div class="parent"> 
 
    <div class="child">child</div> 
 
    parent 
 
</div>

0

您可以使用detach方法做日在像这样:

$(".parent").each(function() { 
    $(this).after($(this).find(".child").detach()); 
}); 

Here is the JSFiddle demo

您可以通过检查年龄:)

+0

分离在这里没有效果,因为''之后'会*移动DOM中的元素。 –

+0

@TrueBlueAussie但是,is''''没有'后插入任何它的给定,而不是先从dom中删除它? :o –

+0

不,它不克隆单个元素(仅当需要倍数时)。最终结果是相同的任何方式,原件被删除,因此这里不需要分离:P –