Jquery nextUntil () не показывает ожидаемое значение - PullRequest
0 голосов
/ 29 января 2020

nextUntil() не дает мне ожидаемого возврата.

Поведение, которое я собираюсь получить, - это ID первого fieldset, у которого нет hide class, которое будет f.

Но nextUntil() вместо этого возвращает первую итерацию. Есть ли способ заставить nextUntil() вернуть его последнее значение, поэтому приведенный ниже код возвращает f вместо c?

alert($('fieldset.active').nextUntil("fieldset:not(.hide)").next().attr('id'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<fieldset id="a" class="active">MEEEE</fieldset>
<fieldset id="b" class="hide">No</fieldset>
<fieldset id="c" class="hide">No</fieldset>
<fieldset id="d" class="hide">No</fieldset>
<fieldset id="e" class="hide">meee Too</fieldset>
<fieldset id="f"></fieldset>

Ответы [ 2 ]

0 голосов
/ 30 января 2020

Хорошо, на данный момент лучший способ, который я выяснил, это использовать loop для итерации по next(), пока я не достигну желаемого пункта назначения.

Если ответ предоставляется только с использованием nextUntil() (или любой другой тип обхода) без необходимости loop для получения последней итерации, я приму это. А пока это лучший ответ на вопрос.

var move = $('fieldset.active').nextUntil("fieldset:not(.hide)").length;
for (let i = 0;; i++) {
  if (i > move) {
    alert($('fieldset.active').attr('id'));
    break;
  } else {
    $('fieldset.active').removeClass('active').next().addClass('active');
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<fieldset id="a" class="active">MEEEE</fieldset>
<fieldset id="b" class="hide">No</fieldset>
<fieldset id="c" class="hide">No</fieldset>
<fieldset id="d" class="hide">No</fieldset>
<fieldset id="e" class="hide">meee Too</fieldset>
<fieldset id="f"></fieldset>
0 голосов
/ 29 января 2020

http://api.jquery.com/nextUntil

Получить все последующие элементы каждого элемента вплоть до , но не включая элемент, соответствующий селектору "

В ваших двух случаях:

.nextUntil("fieldset:not(.hide)")

получает все с классом hide, затем останавливается на том без hide (последний) и не включает его - но затем attr получает атрибут из first в коллекции.

Попробуйте $('fieldset.active').nextUntil("fieldset:not(.hide)").length - это не 1.

Во втором случае, с .nextUntil("fieldset") - это останавливается на 2-м наборе полей (после первого) и, таким образом, .attr ничего не дает, давая неопределенное, ie:

$('fieldset.active').nextUntil("fieldset").length === 0

Чтобы получить идентификатор первого набора полей, который не является .hide, вы можете использовать .nextAll().first(), обновленный фрагмент:

console.log($('fieldset.active').nextAll("fieldset:not(.hide)").first().attr('id'));
.hide { display:none; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<fieldset id="a" class="active">MEEEE</fieldset>
<fieldset id="b" class="hide">No</fieldset>
<fieldset id="c" class="hide">No</fieldset>
<fieldset id="d" class="hide">No</fieldset>
<fieldset id="e" class="hide">meee Too</fieldset>
<fieldset id="f"></fieldset>

Обратите внимание, что похоже, что вы можете использовать .next("fieldset:not(.hide)", но это не делает то, на что похоже, вместо этого: .next().filter("fieldset:not(.hide)") - ie получает следующий и возвращает его, если он соответствует фильтру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...