这就是我最后想出的。
// here's our active element.
var $active = $('#active');
// here is the filter we'll be testing against.
var filter = "img.a";
// $all will be the final jQuery object with all the consecutively matched elements.
// start it out by populating it with the current object.
var $all = $active;
for ($curr = $active.prev(filter); $curr.length > 0; $curr = $curr.prev(filter)) {
$all = $all.add($curr);
}
for ($curr = $td.next(filter); $curr.length > 0; $curr = $curr.next(filter)) {
$all = $all.add($curr);
}
对于后续问题,我可以看到如何通过将其变成一个带有两个参数的函数来轻松概括它:一个初始元素和一个过滤器字符串 - 任何人都可以指出正确的方向以找出如何扩展jQuery对象添加这样的功能?
编辑:从那以后,我发现 each() 函数在某些方面会做得很好。在我自己的情况下,它并没有那么干净,因为我想要所有这些元素的单个 jQuery 对象,但这里是你如何将每个对象用于不同的目的(在这个例子中隐藏连续的“.a”元素:)
$('#active')
.nextAll()
.each(hideConsecutive)
.end()
.prevAll()
.each(hideConsecutive)
;
function hideConsecutive(index, element) {
var $e = $(element);
if (!$e.is(".a")) {
return false; // this stops the each function.
} else {
$e.hide('slow');
}
}
--
编辑:我现在把它放在一个插件中。如果您有兴趣,请查看http://plugins.jquery.com/project/Adjacent 。