在jquery中移动选择器的每个循环中元素的dom位置

时间:2015-07-19 20:39:02

标签: jquery dom each

所以我有这个DOM结构用于新闻提要

    String timeStr = "30";
    DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                                .append(DateTimeFormatter.ofPattern("mm"))
                                .parseDefaulting(ChronoField.HOUR_OF_DAY,0)
                                .toFormatter();
    LocalTime parsedTime = LocalTime.parse(timeStr, formatter);

我想在<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 之前移动链接,我的jQuery代码如下:

h2.date

它不仅仅是获取它的链接,而且还不断地从其他新闻中转储所有链接:

$('.content .row .description').each(function() {
    var hrefs = $('a', this);
    hrefs.insertBefore('.content .row h2.date');
});

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您的.insertBefore()选择器没有上下文,因此您的元素会插入到与您的选择器匹配的第一个元素中:

$('.content .row .description').each(function() {
    var hrefs = $('a', this),
        $target = $(this).closest('.content').find('.row h2.date');
    hrefs.insertBefore($target);
});

JSFiddle

或者,通过循环.content来避免遍历 up DOM树:

$('.content').each(function() {
    var $this = $(this),
        $href = $this.find('a'),
        $target = $this.find('.row h2.date');
    $href.insertBefore($target);
});

JSFiddle