Как правильно искать элементы в DOM и записывать результаты в массив?
Есть страница с изображениями, каждое из которых можно открыть в модальном окне bootstrap, Данные для заполнения окна беру через html. Кликаю по картинке, забираю ссылку на изображение, описание и вывожу в модальном.
Так же в модальном хочу вывести слайдер с похожими изображениями, сортировать их по значению data-value например. Вот что получилось:
$('.mwrap').on('click', function() { //кликаем на блок с картинкой
var img = $('img', this).attr('src'); //забираем данные
var desc = $('p', this).html();
var value = $('img', this).attr('data-value');
var arr = $('img[data-value="'+value+'"]').map(function() { return this.src; }).get(); //здесь со всей страницы формируем массив с ссылками на похожие изображения отсортированные по data-value
var elements = $();
for(x = 0; x < arr.length; x++) {
elements = elements.add('<div><img src="'+arr[x]+'"></div>'); //создаем html для слайдера
}
$('#myModal').on('show.bs.modal', function() { //вызываем модалку
$(".wimg").attr("src", img); //добавляем данные в html модального окна
$(".wdesc").html(desc);
$('.wslider').append(elements); //добавляем html для слайдера
});
});
Данный код работает только для первого вызова модального окна, если не перезагружая страницу вызывать следующие окна, то массив arr дублируется и слайдер рушится. Как правильно сделать выборку src нужных изображений и выводить в модальном окне в качестве слайдера? Спасибо. |
MouseOver,
лучше бы макет полностью, а так var для х, и что значит дублируется может $('.wslider').append(elements); заменить на html? |
Цитата:
Посмотрите, вывожу массив в консоль. |
MouseOver,
возможный вариант ...
jQuery(function() {
var img, desc, elements;
jQuery(".mwrap").on("click", function() {
img = jQuery("img", this).attr("src");
desc = jQuery("p", this).html();
var value = jQuery("img", this).data("value");
jQuery(".wslider").html("");
elements = jQuery.map(jQuery('img[data-value="' + value + '"]'), function(img) {
return jQuery("<div/>" , {html : $(img).clone()})
})
});
jQuery("#myModal").on("show.bs.modal", function() {
jQuery(".wimg").attr("src", img);
jQuery(".wdesc").html(desc);
jQuery(".wslider").html(elements)
})
});
|
MouseOver,
немного поправил смотрите снова. up |
рони,
Поставил код на страницу, вроде ок все, только слайдер запускается только один раз, далее просто изображения выводятся. Подскажите как запускать его для каждого окна? Спасибо |
MouseOver,
читать доку на slick про slickAdd и slickRemove и циклом вместо map пока грубо разрушение при закрытии модального окна
jQuery(".mwrap").on("click", function() {
var img, desc, elements;
img = jQuery("img", this).attr("src");
desc = jQuery("p", this).html();
var value = jQuery("img", this).data("value");
elements = jQuery.map(jQuery('img[data-value="' + value + '"]'), function(img) {
return jQuery("<div/>" , {html : $(img).clone()})
})
jQuery(".wimg").attr("src", img);
jQuery(".wdesc").html(desc);
jQuery(".wslider").html(elements)
$(".wslider").slick({
dots: true,
slidesToShow: 3,
slidesToScroll: 1,
autoplay: true
});
});
jQuery("#myModal").on("hide.bs.modal", function() {
jQuery(".wslider").slick('destroy').html("");
})
|
рони,
Большущее спасибо :thanks: , жалко не могу плюсануть http://prntscr.com/cynjad Вы кстати каким слайдером пользуетесь?) |
|
| Часовой пояс GMT +3, время: 15:10. |