我有一个jQuery元素,我想搜索所有下一个寻找可能匹配的兄弟姐妹,如果失败则搜索所有以前的匹配。
我原本以为我可以这样做:
myDiv.nextAll("li").add(myDiv.prevAll("li")).each(function()
{
if (match) { return this; }
}
然而,这不起作用。当我调用jquery时,它似乎按照它们在DOM中出现的顺序对集合进行排序,这意味着我总是回到第一个匹配元素。我想不出一个简单的方法来解决这个问题,任何想法?
答案 0 :(得分:3)
大多数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()
)。在这种特殊情况下,代码不会比我们上面的代码少,也不会是解决问题的更有效方法,因为即使你不需要{{1}也可以获得所有DOM元素} set。
根据您的评论,如果您希望按DOM顺序排序prevAll()项,则必须执行以下操作:
prevAll()
额外function fn() {
if (match) {return this;}
}
var results = myDiv.nextAll("li").each(fn);
if (!results.length) {
results = $().add(myDiv.prevAll("li")).each(fn);
}
将导致jQuery将.add()
结果排序为DOM顺序。