使用多个容器

时间:2015-09-21 09:51:35

标签: jquery

我有以下HTML:

<div class="div one">
 <div class="text">One</div>
 <svg>object</svg>
</div>
<div class="div two">
 <div class="text">two</div>
 <svg>object</svg>
</div>
<div class="div three">
 <div class="text">three</div>
 <svg>object</svg>
</div>

我想在svg对象之后插入文本div,使用:

$('.div .text').each(function(){
 $(this).insertAfter('.div svg');
});

但输出如下:codepen

<div class="div one">
 <svg>object</svg>
 <div class="text">three</div>
 <div class="text">two</div>
 <div class="text">one</div>
</div>
<div class="div two">
 <svg>object</svg>
 <div class="text">three</div>
 <div class="text">two</div>
 <div class="text">one</div>
</div>
<div class="div three">
 <svg>object</svg>
 <div class="text">three</div>
 <div class="text">two</div>
 <div class="text">one</div>
</div>

我想each()选择div中的每个元素,而不是所有元素,并在目标元素之后重复它们。

5 个答案:

答案 0 :(得分:0)

你可以这样做。 append函数始终将Element放置在Wrapping Element的最后位置:)

$('.three').append($(this));

答案 1 :(得分:0)

您需要循环浏览每个.div,如下所示:

$('.div').each(function() {
  $(this).find('.text').detach().insertAfter($(this).find('svg'));
});

detach来自其原始位置insert之后的特定div svg。因此,您需要使用svg

查找$(this)

<强> DEMO

答案 2 :(得分:0)

我想你想要

$('.div .text').each(function() {
  $(this).insertAfter($(this).next());
  // or  $(this).next().after(this);
});
.text {
  font: bold 21px/2em Arial
}
svg {
  background: #bbb;
  width: 100px;
  height: 100px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="div one">
  <div class="text">One</div>
  <svg>object</svg>
</div>
<div class="div two">
  <div class="text">two</div>
  <svg>object</svg>
</div>
<div class="div three">
  <div class="text">three</div>
  <svg>object</svg>
</div>

答案 3 :(得分:0)

您需要找到当前svg元素的兄弟.div .text元素,然后插入。试试这个:

$('.div .text').each(function() {
  $(this).siblings('svg').after(this);
});

Updated codepen

答案 4 :(得分:0)

如果我没错,如果你想删除.text元素并将其放在svg元素之后,请使用:

$('.div  .text').each(function() {
 // get the closest parent and find its child(svg)
 var target = $(this).closest('.div').find('svg');
 // insert after svg(.text)
 $(this).insertAfter(target);
});

更新了DEMO