多个元素中的jQuery操作

时间:2012-05-13 23:52:17

标签: jquery loops

我有多个部分......在这些部分中有很少的子元素......我需要操作以便每个部分移动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>

3 个答案:

答案 0 :(得分:1)

$(".time").each(function() {
    $(this).before($(this).siblings('.inner'));
});​

DEMO: http://jsfiddle.net/LDpwq/4/

答案 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)'));
});

http://jsfiddle.net/LDpwq/15/