使用jQuery迭代更改?

时间:2010-04-19 21:57:32

标签: javascript jquery jquery-selectors

在下面的HTML中,我想复制H2标签中“message”旁边的“submittedby”:

<div class="comment">
<H2 class="threadtitle">Message 1</h2>
<span class="submittedby">James</a>
</div>

<div class="comment">
<H2 class="threadtitle">Message 2</h2>
<span class="submittedby">Bill</a>
</div>

<div class="comment">
<H2 class="threadtitle">Message 3</h2>
<div class="submittedby">Phil</a>
</div>

我目前的jQuery代码如下:

$(document).ready(function() { 
    $('.submittedby').copy().appendTo('.threadtitle');
});

问题是这个副本每次“提交”到每个“标题”。我如何编码它所以它只复制同一个“评论”div中的“submittedby”? 谢谢!

5 个答案:

答案 0 :(得分:4)

在这里使用.each(),如下所示:

$(function(){ 
  $('.submittedby').each(function() {
    $(this).clone().appendTo($(this).siblings('.threadtitle'));
  });
});

这会循环遍历每个.submittedby元素,并相对于循环中的当前 .submittedby移动它,因此每个元素都会被单独处理。此外,我假设您在此处使用.clone(),但如果您实际使用的是.copy() plugin,请在上面的代码中将.clone()替换为.copy()

答案 1 :(得分:1)

$('.submittedBy'.each(function() {
  var $sb = $(this);
  $sb.copy().appendTo($sb.closest('.comment').find('h2.threadtitle'));
});

当您使用.each()时,您可以为处理的每个元素运行代码。

编辑感谢@Nick

答案 2 :(得分:1)

$('.submittedby').each(function() {
    $(this).prev('.threadtitle').append($(this).html());
});

答案 3 :(得分:0)

$(document).ready(function(){ 
    $('span.submittedby, div.submittedby').each(function() { 
        self = $(this);
        self.before(self.clone());
    });
});

<强> Obligatory example

答案 4 :(得分:0)

尝试按父母限制:

$(document).ready(function(){ 
    $('.submittedby:parent').each(function(){
        $(this).find('.submittedby').copy().appendTo('.threadtitle');
    })
});