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