#html #jquery #css
#HTML #jquery #css
Вопрос:
У меня проблема с этим кодом. Я пытаюсь добавить новый div (newGallery) с изображениями в div (галерея), но он по-прежнему заменяет старый.
Не могли бы вы посоветовать мне, как это решить? Я думаю, что у него есть некоторые проблемы с тем, что он находится внутри функции ajax. Я использую jquery v3.5.1.
menu.on('click', 'a', function(event) {
event.preventDefault();
var a = $(this),
li = a.parent(),
href = a.attr('href'),
loadingImg = $('<img>', {src: 'img/5.svg', class: 'loading-img'}),
id = '#' href.slice(0, -5),
isLoaded = gallery.find(id),
currentGallery = gallery.find('.gallery-set'),
galleries = $('.gallery-set');
if (li.hasClass('selected')) return;
li.addClass('selected')
.siblings().removeClass('selected');
//zobrazenie loading ikony pokial sa obsah nenacita
gallery.html(loadingImg).show();
gallery.find('div').fadeOut();
if ( galleries.attr("id") == id ) {
currentGallery.hide();
gallery.find(id).fadeIn();
} else {
loadNewGallery(href);
};
function loadNewGallery (href) {
var gallery = $('.gallery');
$.ajax({
url: href,
data: 'GET',
dataType: 'html',
// ak sa data nacitaju vykona sa funkcia v done
}).done( function( data ) {
var newGallery = $(data).find('.gallery-set');
//nacitany kus stranky cez ajax sa vlozi do gallery natrvalo
newGallery.appendTo(gallery);
// ak sa data nenacitaju vykona sa funkcia vo fail
}).fail( function() {
// sprava o zlyhani prenosu
var msg = $('<div>',{class: 'msg-fail'}),
msgText = 'Je nám ľúto, danú stránku sa nepodarilo zobraziť',
msgFail = msg.html(msgText);
gallery.html(msgFail);
// aj ked sa data nacitaju alebo nenacitaju vykona sa funkcia v always
}).always(function() {
// skrytie loading ikonky
loadingImg.hide();
});
};
});
Ответ №1:
Попробуйте сделать это так…
const gallery = $('.gallery');
function loadNewGallery(href) {
$.ajax({
url: href,
data: 'GET',
dataType: 'html',
// ak sa data nacitaju vykona sa funkcia v done
}).done(function(data) {
var newGallery = $(data).find('.gallery-set');
//nacitany kus stranky cez ajax sa vlozi do gallery natrvalo
newGallery.appendTo(gallery);
// ak sa data nenacitaju vykona sa funkcia vo fail
}).fail(function() {
// sprava o zlyhani prenosu
var msg = $('<div>', {
class: 'msg-fail'
}),
msgText = 'Je nám ľúto, danú stránku sa nepodarilo zobraziť',
msgFail = msg.html(msgText);
gallery.html(msgFail);
// aj ked sa data nacitaju alebo nenacitaju vykona sa funkcia v always
}).always(function() {
// skrytie loading ikonky
loadingImg.hide();
});
};
menu.on('click', 'a', function(event) {
event.preventDefault();
var a = $(this),
li = a.parent(),
href = a.attr('href'),
loadingImg = $('<img>', {
src: 'img/5.svg',
class: 'loading-img'
}),
id = '#' href.slice(0, -5),
isLoaded = gallery.find(id),
currentGallery = gallery.find('.gallery-set'),
galleries = $('.gallery-set');
if (li.hasClass('selected')) return;
li.addClass('selected')
.siblings().removeClass('selected');
//zobrazenie loading ikony pokial sa obsah nenacita
gallery.html(loadingImg).show();
gallery.find('div').fadeOut();
if (galleries.attr("id") == id) {
currentGallery.hide();
gallery.find(id).fadeIn();
} else {
loadNewGallery(href);
};
});
Комментарии:
1. Было бы хорошо, если бы вы могли подробнее объяснить свой ответ. то есть: какие изменения вы внесли, почему приведенный выше код будет работать … и т. д
2. @Swati
gallery
используется до определения во фрагменте сценария, представленном в вопросе. Я просто использовал aconst
дляgallery
элемента, удалил функцию изclick
события… и это все. Способ написания кодаnewGallery
должен быть добавленgallery
. Мое главное возражение заключается вfail
том, что сообщение полностью изменяетinnerHTML
gallery
элемент of.3. Спасибо за ответ, но у меня это не работает. Он по-прежнему перезаписывает один элемент div внутри галереи.
4. @user2623507 не могли бы вы также добавить типичный HTML, который возвращается в вашем вызове ajax. Как я вижу, вы получаете новый набор галереи из данных, возвращенных из вашего вызова ajax. Кроме того, было бы идеально добавить еще немного кода, который поможет воссоздать проблему (например, добавить HTML галереи).
5. @PeterDarmis я уже нашел проблему. Эта запятая создавала проблемы gallery.html (loadingImg).show(); когда я заменяю html() на appendTo, все в порядке. Спасибо всем за помощь.