ほとんどのjQuery操作でDOM要素がDOMの並べ替え順序になっているのは正しいことです。これがjQueryの動作方法であり、通常は非常に便利で重要であるため、これを実行します。
ただし、あなたの場合は、正しい順序で検索されるように、2つの別々の検索を実行する必要があることを意味すると思います。最初の検索で結果が見つからない場合は、2番目の検索を実行します。
function fn() {
if (match) {return this;}
}
var results = myDiv.nextAll("li").each(fn);
if (!results.length) {
results = myDiv.prevAll("li").each(fn);
}
私が考えることができる他の唯一の解決策は、ソートされていない要素を使用して独自のjQueryオブジェクトを作成することです。.add()
自動的に並べ替えるような組み込みメソッドを使用するのではなく、jQueryDOM要素配列を手動で操作する必要があります。この特定のケースでは、これは上記のコードよりも少ないコードではなく、セットが必要ない場合でもすべてのDOM要素を取得するため、問題を解決するためのより効率的な方法でもありませんprevAll()
。
コメントによると、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の順序に並べ替えます。