Подтвердить что ты не робот

Найти следующий элемент, который не является немедленным?

Я хочу найти первый элемент span после счетчика классов, в коде что-то вроде этого:

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

Кажется, что функция next() находит только следующий следующий элемент, поэтому примерно так:

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

Не получится. Способ, которым я пользуюсь, немного длинный, и мне было интересно, был ли более короткий путь, вот что:

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

Я думаю, что метод closest() в jQuery 3 будет делать трюк, но я использую 1.2.6 - есть ли лучший способ сделать это (я просто использую next() неправильно?)

4b9b3361

Ответ 1

Я думаю, что ваш метод - лучший способ. И если вы чувствуете, что это не выглядит хорошо, просто превратите его в плагин:

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

Ответ 2

Подобно отмеченному ответу, но выглядит немного чище с помощью: first selector:

$('.counter').nextAll('span:first')

Ответ 3

Я думаю, что функция siblings() - это то, что вы ищете. Попробуйте что-то вроде этого:

$(".counter").siblings("span");

Ответ 4

Я не уверен, что самый близкий метод будет делать трюк, но если это так... возможно, вы можете извлечь ближайший метод из 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);

Ответ 5

Попробуйте что-то вроде этого:

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

Надеюсь, что это поможет!

Ответ 6

$( ". counter + span" )