在 jquery 的每个选择器循环中移动元素的 dom 位置
moving the dom position of element in each loop of selector in jquery
所以我有这个 DOM 新闻提要结构
<div class="content">
<div class="row">
<h2 class="date">01 July 2015</h2>
<div class="thumbnail">
<img src="somesource">
</div>
<div class="description">
<a href="#link">link</a>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. A id vero rerum consectetur itaque ex saepe quia nam quam est!
</div>
</div>
</div>
//duplicated 5 times
我想将 link 移到 h2.date
之前,我的 jQuery 代码如下:
$('.content .row .description').each(function() {
var hrefs = $('a', this);
hrefs.insertBefore('.content .row h2.date');
});
它不是只获取 link,而是不断从其他新闻中转储所有 link:
<div class="content">
<div class="row">
<a href="#link">link</a>
<a href="#link2">link from news 2</a>
<a href="#link3">link from news 3</a>
<a href="#link4">link from news 4</a>
<a href="#link5">link from news 5</a>
<h2 class="date">01 July 2015</h2>
<div class="thumbnail">
<img src="somesource">
</div>
<div class="description">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. A id vero rerum consectetur itaque ex saepe quia nam quam est!
</div>
</div>
</div>
知道如何解决这个问题吗?
您的 .insertBefore()
选择器没有上下文,因此您的元素被插入到与您的选择器匹配的第一个元素中:
$('.content .row .description').each(function() {
var hrefs = $('a', this),
$target = $(this).closest('.content').find('.row h2.date');
hrefs.insertBefore($target);
});
或者,通过循环 .content
来避免必须 向上 遍历 DOM 树:
$('.content').each(function() {
var $this = $(this),
$href = $this.find('a'),
$target = $this.find('.row h2.date');
$href.insertBefore($target);
});
所以我有这个 DOM 新闻提要结构
<div class="content">
<div class="row">
<h2 class="date">01 July 2015</h2>
<div class="thumbnail">
<img src="somesource">
</div>
<div class="description">
<a href="#link">link</a>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. A id vero rerum consectetur itaque ex saepe quia nam quam est!
</div>
</div>
</div>
//duplicated 5 times
我想将 link 移到 h2.date
之前,我的 jQuery 代码如下:
$('.content .row .description').each(function() {
var hrefs = $('a', this);
hrefs.insertBefore('.content .row h2.date');
});
它不是只获取 link,而是不断从其他新闻中转储所有 link:
<div class="content">
<div class="row">
<a href="#link">link</a>
<a href="#link2">link from news 2</a>
<a href="#link3">link from news 3</a>
<a href="#link4">link from news 4</a>
<a href="#link5">link from news 5</a>
<h2 class="date">01 July 2015</h2>
<div class="thumbnail">
<img src="somesource">
</div>
<div class="description">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. A id vero rerum consectetur itaque ex saepe quia nam quam est!
</div>
</div>
</div>
知道如何解决这个问题吗?
您的 .insertBefore()
选择器没有上下文,因此您的元素被插入到与您的选择器匹配的第一个元素中:
$('.content .row .description').each(function() {
var hrefs = $('a', this),
$target = $(this).closest('.content').find('.row h2.date');
hrefs.insertBefore($target);
});
或者,通过循环 .content
来避免必须 向上 遍历 DOM 树:
$('.content').each(function() {
var $this = $(this),
$href = $this.find('a'),
$target = $this.find('.row h2.date');
$href.insertBefore($target);
});