尝试将两个跨度与jQuery结合在一起,需要帮助循环/迭代

我认为这是一个非常棒的问题,但我现在已经考虑了好几个小时了,我无法弄明白。

我需要在下面使用这个html代码并获取.project_name span和.location span以合并到同一个span中。

  1. First Project Name Combined with First Location
  2. Second Project Name Combined with Second Location
  3. Third Project Name Combined with Third Location

我有这个jQuery代码,它将正确地执行第一组跨度,但将继续使用第一个span的内容来填充其余的。

 var s1 = $('.project_name').html(); $('.project_name').remove(); $('.location').prepend(s1 + ' '); 

我假设我需要使用.each()或类似的东西,但我无法弄清楚正确的语法使它工作。 这是我迄今为止所拥有的jsFiddle 。

有任何想法吗? 这可能很简单。

如果你想保留标签……( 小提琴 )

 $(".location").each(function() { $(this).prepend(" ").prepend($(this).prev()); }); 

在这里,如果你不想保留标签…( 小提琴 )

 $(".location").each(function() { $(this).prepend($(this).prev().text() + " "); $(this).prev().remove(); });​ 

这当然可以通过循环遍历.project_name跨度来完成,我只是喜欢用.location来实现它,因为这是我们实际保留的内容。

当你执行$("selector").each(function() { }); 你可以使用$(this)来获取当前正在迭代的对象。

这应该工作

 var spantext=""; spantext += $('.project_name').text() + ", " + $('.location').text(); $('.project_name').remove(); $('.location').text(spantext); 

试试这个 :

 $('.project_name').each(function(el){ var s1 = el.html(); el.remove(); $(el.parent(),'.location').prepend(s1 + ' '); }) 

如果你想使用你的代码:

 $('.dontsplit').each (function () { var html = $('.project_name', this).html(); $('.project_name', this).remove(); $('.location', this).prepend(s1 + ' '); }); 

如果不是,我更喜欢这个代码(更清楚的是发生了什么,我认为可读性很重要):

 $('.dontsplit').each (function () { var text_1 = $('.project_name', this).text(); var text_2 = $('.locaton', this).text(); $('.project_name', this).remove() $('.locaton', this).remove(); var text = text_1 + text_2 $('').text(text_1 + text_2).appendTo(this); });