Top.Mail.Ru
Ответы

Помогите сделать условие, если select не пустой.

У меня многострочный select, который я наполняю при помощи append(), либо очищаю при помощи remove(). В момент наполнения (или после), все option должны нумероваться через data-* атрибут.

Я делаю это так:
$('.left option').each(function(i){
$(this).attr('data-num', i);
});

Так как, данный способ нумерует только, при загрузки страницы, если просто обвёрнут в $(document).ready(function(){}, то соответственно при добавлении option ничего не происходит.

Помогите сделать условие, если в select есть хотя бы один option, то будет выполняться данная функция.

Дополнен

Я нашёл 2 варианта решения своей проблемы:

1.)
$(document).on("DOMNodeInserted", ".left option", function() {
$('.left option').each(function(i){
$(this).attr('data-num', i);
});
});
Но это происходит слишком медленно, так как срабатывает в момент добавления.

2.)
function DataTime() {
$('.left option').each(function(i){
$(this).attr('data-num', i);
});
}
$(function(){
var int = setInterval(DataTime, 1000);
});

Но данный способ, всё ещё вызывает у меня смутные сомнения. Что если бы, я вывел тысячу строк и все они постоянно пронумеровывались.

Дополнен

Оба решения совершенно не годятся, так как нужно нумеровать единожды, после обновления списка в select. То есть, после нумерации, data-* атрибут должен оставаться статичным и обновляться только после remove().

По дате
По рейтингу
Аватар пользователя
Новичок
6лет

По поводу того, что jQuery якобы не видит изменения на странице. Я написал пример
https://jsfiddle.net/pmjcazs9/
Лучше сначала нажать кнопку "посчитать", потом "заполнить", потом опять "посчитать". Далее можно опять нажать "заполнить" и "посчитать".
Но как я писал в другом ответе, нет смысла проверять пустой список или нет. Пустой список обновляется так же быстро как проверка списка на пустоту.

Аватар пользователя
Просветленный
6лет

сделал