您是正确的,大多数 jQuery 操作将 DOM 元素按 DOM 排序顺序排列。这就是 jQuery 的工作方式,它之所以这样做,是因为它通常非常有用和重要。
但是,就您而言,我认为这意味着您必须进行两次单独的搜索,以便以正确的顺序搜索内容。如果第一次搜索没有找到结果,则执行第二次:
function fn() {
if (match) {return this;}
}
var results = myDiv.nextAll("li").each(fn);
if (!results.length) {
results = myDiv.prevAll("li").each(fn);
}
我能想到的唯一其他解决方案是使用未排序的元素创建您自己的 jQuery 对象。您需要手动操作 jQuery DOM 元素数组,而不是使用像.add()
自动排序这样的内置方法。在这种特殊情况下,这不会比我们上面的代码少,也不会是解决问题的更有效方法,因为即使您不需要prevAll()
集合,您也会获得所有 DOM 元素。
根据您的评论,如果您希望 prevAll() 项目按 DOM 顺序排序,则必须执行以下操作:
function fn() {
if (match) {return this;}
}
var results = myDiv.nextAll("li").each(fn);
if (!results.length) {
results = $().add(myDiv.prevAll("li")).each(fn);
}
额外的.add()
将导致 jQuery 将.prevAll()
结果排序为 DOM 顺序。