ほとんどの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()
のような組み込みメソッドを使用するのではなく、jQuery DOM要素配列を手動で操作する必要があります。この特定のケースでは、これは上記のコードよりも少ないコードではなく、prevAll()
が不要な場合でもすべてのDOM要素を取得するため、問題を解決するための効率的な方法ではありません。あなたのコメントパー
、あなたはDOM順にソートprevAll()の項目をしたい場合、あなたはこのような何かしなければならないでしょう:
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のDOMに.prevAll()
結果をソートするようになりますが注文。
リファクタリングのために+1私は実際に答えたものの代わりに考えていました。 –
申し訳ありませんが、ここで私の質問は100%明確ではありませんでした。次の要素で一致するものが見つからない場合は、前の要素の先頭から開始します。 prevAllはDOM順序では実際にソートされないので、これは前のものに移動します。 – Porco
@Porco - 'prevAll()'の結果をDOMの順序でソートする追加のオプションを私の答えに追加しました。 – jfriend00