Jquery:忘记DOM结构,只需找到这个类的下一个元素

我觉得之前已经问过这个问题,但答案似乎对每张海报都非常具体。

我正在寻找一种方法来识别给定元素并找到具有特定类的下一个元素。 我不想处理parent()或children(),因为我正在通过表解析,我不希望它停在一行的末尾甚至是表本身的末尾(那里)是两个并排)。

有没有办法只搜索整个页面的下一个元素实例?

背景信息: http : //jsfiddle.net/HKkAa/2/

我正在尝试从突出显示的单元格开始遍历底部表格,并将“突出显示”类应用于每个单元格,直到我到达结束日期。 我有办法计算当我到达结束日期时,我只需要魔术方法来选择下一个链接实例。

编辑

对于任何有兴趣的人,我都会在这里插件: https : //github.com/techfoobar/jquery-next-in-dom


如果你想让它完全通用并且能够满足所有/任何DOM结构,那么在jQuery中没有内置的方法。 我曾经设计过一个简单的递归函数来完成这个任务。 它像:

function nextInDOM(_selector, _subject) { var next = getNext(_subject); while(next.length != 0) { var found = searchFor(_selector, next); if(found != null) return found; next = getNext(next); } return null; } function getNext(_subject) { if(_subject.next().length > 0) return _subject.next(); return getNext(_subject.parent()); } function searchFor(_selector, _subject) { if(_subject.is(_selector)) return _subject; else { var found = null; _subject.children().each(function() { found = searchFor(_selector, $(this)); if(found != null) return false; }); return found; } return null; // will/should never get here } 

你可以称之为:

 nextInDOM('selector-to-match', element-to-start-searching-from-but-not-inclusive); 

例如:

 var nextInst = nextInDOM('.foo', $('#item')); 

无论DOM结构如何,都会在$('#item')之后获得第一个匹配的.foo

请在此处查看原始答案: https : //stackoverflow.com/a/11560428/921204

以下代码允许您查找与选择器匹配的下一个元素,无论DOM结构如何。

 $.fn.nextThrough = function(selector) { // Our reference will be the last element of the current set var $reference = $(this).last(); // Add the reference element to the set the elements that match the selector var $set = $(selector).add($reference); // Find the reference position to the set var $pos = $set.index($reference); // Return an empty set if it is the last one if ($set.length == $pos) return $(); // Return the next element to our reference return $set.eq($pos + 1); } // Usage example $(':focus').nextThrough('input:visible').focus(); 

我们假设您正在搜索class级’.foo’。 如果您愿意,可以将其包装在一个可重用的函数中。

 var $yourelement; (...) var $allElements = $('.foo'); var $nextElement = $allElements[$.inArray($yourElement,$allElements)+1]; 

如果$yourElement是最后一个(使其成为循环列表),这将返回$allElements[0]

我会使用这样的递归函数:

 function findNext($element, selector) { while ($element) { var ne = $element.find(selector); if (ne.length) return ne; ne = $element.next(selector); if (ne.length) return ne; $element = $element.parent(); if ($element.length==0) return null; $element = $element.next(); if ($element.is(selector)) return $element; } } 

它搜索$ element旁边的第一个元素,然后在需要之前上升到一个级别,然后再次前进和潜水

你可以在这里测试它(打开控制台以查看带有选择器的“next”元素)。