$('.notice').each(function(index, value) {
if (index > 0) {
$(this).remove();
}
...
.notice
и удаление тех, которые имеют index
больше 0. Более поздние объекты просто удаляются. .each(function(index, value)
— это вообще не айс. Лучше при нажатии на кнопку проверяйте items[name]
на соответствующий name
и добавляйте новый элемент только если его нет. А если есть — по какому-нибудь идентификатору обновляйте анимацию как вот тут:Лучше при нажатии на кнопку проверяйте items[name] на соответствующий name и добавляйте новый элемент только если его нет.
if (!$(".notice__info").length) {
$('.notice').append(out);
}
if (items[name] == name) {
то тогда только апендить ?
}
<div class="-notification -f-medium error" style="opacity: 1; top: 0px;">
<div class="-notification-close site-icons-close"></div>
<div class="-icon-font- -f-large -notification-icon inline-block"></div>
<div class="inline-block -notification-text">Товара "<?php echo $product_data->get_name(); ?>" нет в наличии в количестве 2 шт.</div>
<div class="-notification-timer"></div>
</div>
var Item = function(data) {
this.data = data;
}
var items = {};
$('button').on('click', function() {
$.ajax({
type: 'POST',
url: m_notice_click.ajax_url,
data: dataMnot,
dataType: 'json',
success: function(data) {
$('body').append('<div class="-notification-box"></div>');
$('.-notification-box').each(function(index, value) {
if (index > 0) {
$(this).remove();
if (items[data]) return;
var item = new Item(data);
items[data] = item;
$('.-notification-box').append(data);
}
var notTime = $('.-notification');
if ($('.-notification-timer').width()) {
$('.-notification-timer').stop(true, true).animate({width: 0}, {duration: 5000, complete: function() { $('.-notification-timer').css("width", "100%"); $(this).parent().remove(); delete items[data]; }});
}
});
}
});
});
<div class="-notification-box"></div>
Как они без идентификаторов обновляют таймеры при кликах ?
if (items[name]) {
items[name].replaceWith($notice);
}
else {
$('body').append($notice);
}