1

jQueryに、特定の要素が後にある要素のみを選択してセットをフィルタリングできるセレクター文字列はありますか?

たとえば、次のようなセットがある場合:

[div, div, span, div, div, div, span, div, span, div]

そして、スパンの前にあるdivのみを選択したかったのですが、可能であれば、単一のセレクター文字列でこれを行うにはどうすればよいですか?このようなものはありますか?

$("div:preceding(span)")

大したことではありませんが、興味がありました。現在、セットをループして各要素をチェックし、それがdivであり、その直後の要素(.next()を使用して選択)がスパンであるかどうかを確認しています。ループを開始する前に作成された空のセット。これはこれを行うための最良の方法ですか?

前もって感謝します!

4

3 に答える 3

5

試す.prev()

$('span').prev('div');

div次の直接の兄弟要素がであるすべてに一致しspanます。

于 2013-01-11T00:42:14.457 に答える
1

幅広いセットのセレクターを使用して(その後にあるものを見ないで)、その後.filter()に目的の要素がないアイテムを削除するために使用する必要があると思います。

のようなものを実装するセレクターを知りません$("div:preceding(span)")

jQueryセレクターのサポートのように独自のカスタム動詞を実装することは可能ですが、そうすることはおそらく次のようprecedingに使用するよりも厄介です。.filter()

$("div").filter(function() {
    return($(this).next("span").length != 0);
});
于 2013-01-11T00:55:08.597 に答える
1

これで、カスタムセレクター:preceding
を希望どおりに使用できます(例:):$('div:preceding(span)').css({color: 'red'});

jsBinデモ

$.expr[":"].preceding = function(e, i, m) {
   return $(e).next(m[3]).length;
};

于 2013-01-11T01:48:55.643 に答える