2

私はjQuery要素を持っています。次の兄弟をすべて検索して一致する可能性を探し、それが失敗した場合は前のものをすべて検索したいと思います。

私は次のようなことができると思っていたでしょう:

myDiv.nextAll("li").add(myDiv.prevAll("li")).each(function()
{
     if (match) { return this; }
}

ただし、これは機能しません。jquery Add を呼び出すと、コレクションが DOM に表示される順序で並べ替えられているように見えます。つまり、常に最初に一致する要素に戻ります。これを修正する簡単な方法が思いつかないのですが、何かアイデアはありますか?

4

1 に答える 1

3

ほとんどの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の順序に並べ替えます。

于 2012-04-18T17:12:37.743 に答える