如何在jQuery中选择每对2个连续元素?

如何在jQuery中选择每对2个连续元素?,jquery,Jquery,有人能帮我解决一下如何实现以下目标吗?我有一套大小不详的div。每个div都有一个.feature类。我需要运行一个jQuery脚本来查找带有.feature的所有div,然后将所有子项作为一系列对来查找。然后,每一对将被提交到另一个jQuery函数 例如: 1. <div.feature/> 2. <div.feature/> 3. <div.feature/> 4. <div.feature/> 5. <div.feature/>

有人能帮我解决一下如何实现以下目标吗?我有一套大小不详的div。每个div都有一个.feature类。我需要运行一个jQuery脚本来查找带有.feature的所有div,然后将所有子项作为一系列对来查找。然后,每一对将被提交到另一个jQuery函数

例如:

1. <div.feature/>
2. <div.feature/>
3. <div.feature/>
4. <div.feature/>
5. <div.feature/>
1。
2.
3.
4.
5.
结果应该是1+2和3+4配对在一起,这样我就可以在每个单独的集合上调用另一个jQuery函数

我知道我可以简单地将每一对包装在一个外部div中,然后找到每个包装div的子对象,但是如果可能的话,我希望避免更改标记

var pairs = [];
$('div.feature').each(function(i, div) {
  var i_over_2 = Math.floor(i / 2);
  if (!pairs[i_over_2]) pairs[i_over_2] = $();
  pairs[i_over_2] = pairs[i_over_2].add(div);
});
$.each(pairs, function(i, p) {
  p.doSomethingToAPair();
});
其思想是建立一个jQuery对象数组

edit看起来像是1.4添加了“$()”以获取空的jQuery对象

再次编辑durr Javascript有浮动:-)

Hey@Adam:如果我们有这个jQuery扩展(当然这是一个玩具版本):

然后我们可以像这样构建“pairs”数组:

var pairs = $('div.feature:even').zip('div.feature:odd');
主意 可能需要一些调整,以便为您工作-这是未经测试的

预览

让我们跳转到一个假设,即您可以修复HTML使其有效,它看起来像:

<div class='feature'></div>
<div class='feature'></div>
<div class='feature'></div>
<div class='feature'></div>
<div class='feature'></div>
<div class='feature'></div>

更像:

$("div:even").children(':even');

注意:基于0的索引,因此2,4等(正常计数)是奇数…

我使用此代码将一组div格式化为一个两列表:

$('.feature:even').each(function () {
    $(this).add($(this).next()).wrapAll("<tr>");
});
$('.feature').wrap('<td>');
$('tr').wrapAll('<table>');
$('.feature:偶数')。每个(函数(){
$(this.add($(this.next()).wrapAll(“”);
});
$('.feature').wrap('');
$('tr').wrapAll('');

这是我用于博客元素的解决方案,但我认为它可以应用于这个问题,我希望能帮助你,这是一样的,我有一个元素列表,每个li元素有两个div元素,我想在每2个元素中应用相同的样式,我的意思是,1+2相同样式和3+4其他样式,依此类推,5+6与1+2的样式相同。这就是我所做的

HTML


这是

你能发布实际的标记以便我们清楚吗?你发布的不是HTML…嗨,尼克,对不起,我当时很忙。你是对的,我没有发布有效的标记,但是每个元素都是menat,用来表示一个带有“feature”类的div;我马上就做完,如果*&(#firefox会合作这看起来很奇怪,$()等于$(document)@David这在jQuery 1.4版之前都是正确的,这不是有点复杂吗?这个问题问的不是相邻的对,不是偶数或赔率吗?我使用了类似的代码,基于偶数集元素得到对,但我只使用了。index(),不是+1,因为:eq是基于0索引的。希望这有帮助!这是一个非常复杂的解决方案,会严重降低性能。不推荐使用。
$("div:odd")
$("div:even")
$("div:even").children(':even');
$('.feature:even').each(function () {
    $(this).add($(this).next()).wrapAll("<tr>");
});
$('.feature').wrap('<td>');
$('tr').wrapAll('<table>');
<ul>
  <li>
    <div class="photo">PHOTO</div>
    <div class="text">TEXT</div>
  </li>
  <li>
    <div class="photo">PHOTO</div>
    <div class="text">TEXT</div>
  </li>
  <li>
    <div class="photo">PHOTO</div>
    <div class="text">TEXT</div>
  </li>
  <li>
    <div class="photo">PHOTO</div>
    <div class="text">TEXT</div>
  </li>
  <li>
    <div class="photo">PHOTO</div>
    <div class="text">TEXT</div>
  </li>
  <li>
    <div class="photo">PHOTO</div>
    <div class="text">TEXT</div>
  </li>
  <li>
    <div class="photo">PHOTO</div>
    <div class="text">TEXT</div>
  </li>
  <li>
    <div class="photo">PHOTO</div>
    <div class="text">TEXT</div>
  </li>
</ul>
var row = 0;
$( "li" ).each(function( index ) {
  // Here is when you loop every two elements
  if ( index % 2 == 0)
  {
    if (row % 2 == 0 )
    {
      //console.log("index "+index + " row" + row);
      first_element = $( "ul li:eq("+index+")" ).addClass( "blue-bg" );
      second_element = $( "ul li:eq("+(index+1)+")" ).addClass( "blue-bg" );
      $(first_element).find('.photo').addClass( "pull-left" );
      $(first_element).find('.text').addClass( "pull-right" );
      $(second_element).find('.photo').addClass( "pull-left" );
      $(second_element).find('.text').addClass( "pull-right" );
      row = 1; // make row value odd
    }
    else
    {
      //console.log("index "+index + " row" + row);
      third_element = $( "ul li:eq("+index+")" ).addClass( "red-bg" );
      four_element = $( "ul li:eq("+(index+1)+")" ).addClass( "red-bg" );
      $(third_element).find('.photo').addClass( "pull-right" );
      $(third_element).find('.text').addClass( "pull-left" );
      $(four_element).find('.photo').addClass( "pull-right" );
      $(four_element).find('.text').addClass( "pull-left" );
      row = 0;  // make row vale even
    }
  }
});