我有多个部分......在这些部分中有很少的子元素......我需要操作以便每个部分移动1个元素,例如.inner继另一个元素,例如H1
我的尝试在http://jsfiddle.net/shavindra/LDpwq/1/,但问题是它没有循环并且在最后打印良好..但我希望输出不同,如下所示......
初始状态:
<section class="greeting">
<h2>Greetings 1</h2>
<div class="time">Morning</div>
<div class="inner">Good 1</div>
</section>
<br />
<br />
<section class="greeting">
<h2>Greetings 1</h2>
<div class="time">Afternoon</div>
<div class="inner">Good 2</div>
</section>
<br />
<br />
<section class="greeting">
<h2>Greetings 1</h2>
<div class="time">night</div>
<div class="inner">Good 3</div>
</section>
操纵后
<section class="greeting">
<h2>Greetings 1</h2>
<div class="inner">Good 1</div>
<div class="time">Morning</div>
</section>
<br />
<br />
<section class="greeting">
<h2>Greetings 1</h2>
<div class="inner">Good 2</div>
<div class="time">Afternoon</div>
</section>
<br />
<br />
<section class="greeting">
<h2>Greetings 1</h2>
<div class="inner">Good 3</div>
<div class="time">night</div>
</section>
答案 0 :(得分:1)
$(".time").each(function() {
$(this).before($(this).siblings('.inner'));
});
答案 1 :(得分:1)
原始代码存在两个问题:
$(".greeting").each(function() {
$(this).children('.time').addClass("on");
$(this).children('.time').after($('.inner'));
});
1)您选择了inner
类的所有元素后移动:
$('.inner')
Intead,只使用当前div中的那个:
$(this).children('.inner')
2)您正在使用after
函数,该函数在调用该函数的元素之后插入作为参数传递的内容。另一方面,insertAfter
以相反的方式运作。来自jQuery doc:
使用.after(),方法前面的选择器表达式是 容器,之后插入内容。使用.insertAfter(),打开 另一方面,内容在方法之前,作为选择器 表达式或作为动态创建的标记,然后插入 目标容器。
因此,您可以将代码更改为:
$(".greeting").each(function() {
$(this).children('.time').addClass("on");
$(this).children('.time').insertAfter($(this).children('.inner'));
});
或者这个:
$(".greeting").each(function() {
$(this).children('.time').addClass("on");
$(this).children('.inner').after($(this).children('.time'));
});
答案 2 :(得分:0)
试试这个:
$(".greeting").each(function() {
$(this).children('div:eq(0)').before($(this).children('div:eq(1)'));
});