Javascript “检测”;“运行”;jQuery中DOM元素的定义
在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">&
<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);
});
});