Javascript “检测”;“运行”;jQuery中DOM元素的定义

Javascript “检测”;“运行”;jQuery中DOM元素的定义,javascript,jquery,Javascript,Jquery,在jQuery中检测dom元素运行的最佳方法是什么 例如,如果我有以下项目列表 <ol> <li class="a"></li> <li class="foo"></li> <li class="a"></li> <li class="a"></li> <li class="foo"></li> <li class="foo">&

在jQuery中检测dom元素运行的最佳方法是什么

例如,如果我有以下项目列表

<ol>
  <li class="a"></li>
  <li class="foo"></li>
  <li class="a"></li>
  <li class="a"></li>
  <li class="foo"></li>
  <li class="foo"></li>
  <li class="foo"></li>
  <li class="a"></li>
  <li class="foo"></li>
  <li class="foo"></li>
  <li class="foo"></li>
</ol>
从示例中可以看到,我只想包装
li.foo
dom元素的“运行”(其中有两个或更多
li.foo
元素连续运行)


我不确定通过jQuery(或者简单的javascript)实现这一点的最佳/最有效的方法是什么

$(li).each(function(){
if($(this).next().hasClass('foo')){
---- Recursively check until the end of the run has been found ----
}
});

要递归检查,请编写一个函数,该函数将检查下一个元素,直到找到运行结束。

示例:


不确定这对性能的影响程度:

var $foo = $('.foo + .foo');
$foo.add($foo.prev());
$foo将是“
.foo
运行”的集合

编辑以添加:

我想到了一个更简单的方法:

var $foo = $('.foo + .foo').prev('.foo').andSelf();
工作示例:

为子孙后代:

// Takes a jQuery collection and returns an array of arrays of contiguous elems
function groupContiguousElements( $elems ){
  var groups = [];
  var current, lastElement;
  $elems.each(function(){
    if ($(this).prev()[0] == lastElement ){
      if (!current) groups.push( current=[lastElement] );
      current.push( this );
    }else{
      current = null;
    }
    lastElement = this;
  });
  return groups;
}

var groups = groupContiguousElements( $('li.foo') );
$.each( groups, function(){
  var wrapper = $('<ol>').insertBefore(this[0]);
  $.each(this,function(){
    wrapper.append(this);
  });
});
//获取jQuery集合并返回连续元素数组的数组
函数组连续元素($elems){
var组=[];
无功电流,最后一个元件;
$elems.each(函数(){
if($(this).prev()[0]==lastElement){
if(!current)groups.push(current=[lastElement]);
当前。推(此);
}否则{
电流=零;
}
lastElement=这个;
});
返回组;
}
var groups=groupContiguousElements($('li.foo'));
$.each(组、函数(){
var wrapper=$('').insertBefore(此[0]);
$.each(此,函数(){
附加(这个);
});
});
var $foo = $('.foo + .foo');
$foo.add($foo.prev());
var $foo = $('.foo + .foo').prev('.foo').andSelf();
// Takes a jQuery collection and returns an array of arrays of contiguous elems
function groupContiguousElements( $elems ){
  var groups = [];
  var current, lastElement;
  $elems.each(function(){
    if ($(this).prev()[0] == lastElement ){
      if (!current) groups.push( current=[lastElement] );
      current.push( this );
    }else{
      current = null;
    }
    lastElement = this;
  });
  return groups;
}

var groups = groupContiguousElements( $('li.foo') );
$.each( groups, function(){
  var wrapper = $('<ol>').insertBefore(this[0]);
  $.each(this,function(){
    wrapper.append(this);
  });
});