web-dev-qa-db-ja.com

即時ではない次の要素を見つけますか?

次のようなコードで、クラスカウンターの後の最初のスパン要素を見つけたいと思います。

_<div class="counter"></div>
<p></p>
<span></span>
_

Next()関数はすぐ次の要素のみを見つけるように見えるので、次のようになります。

_$(".counter").next("span")
_

動作しません。私が使ってきた方法は少し長いです、そして私はもっと短い方法があるかどうか疑問に思いました、それはこれです:

_$(".counter").nextAll("span").eq(0)
_

JQuery3のclosest()メソッドでうまくいくと思いますが、私は1.2.6を使用しています-これを行うためのより良い方法はありますか(next()を間違って使用していますか? )

21
Logan Serman

あなたの方法が最善の方法だと思います。見栄えが悪いと感じた場合は、プラグインに変えてください。

jQuery.fn.firstAfter = function(filter){
 return this.nextAll(filter).eq(0);
}
8
Pim Jager

マークされた回答に似ていますが、:firstセレクターを使用すると少しきれいに見えます:

$('.counter').nextAll('span:first')
17
Nick Olsen

siblings()関数があなたが探しているものだと思います。次のようなものを試してください。

$(".counter").siblings("span");
3
Andrew Hare

最も近いメソッドでうまくいくかどうかはわかりませんが、もしそうなら... 1.3から最も近いメソッドを抽出してプラグインに変えることができますか?

私はこれを試す機会がありませんでしたが、試してみてください。傷つけることはできません:

(function($) {
  $.fn.closest = function (selector) {
    return this.map(function(){
      var cur = this;
      while ( cur && cur.ownerDocument ) {
        if ( $(cur).is(selector) )
          return cur;
        cur = cur.parentNode;
      }
    });
  }
})(jQuery);
1
Allain Lalonde

次のようなものを試してください。

$(".counter ~ span:first");

お役に立てば幸いです。

0
landyman

$( "。counter + span")

0
pbscorp