#javascript #jquery-clone
#javascript #jquery-clone
Вопрос:
У меня возникла проблема с .clone()
, которая создает так много дубликатов, что приводит к сбою моего браузера.
Вот мой пример кода:
<div>
<div class="mobile-top"></div>
<div class="date">January 22, 2019 - 13:44</div>
</div>
<div>
<div class="mobile-top"></div>
<div class="date">December 2, 2018 - 3:10</div>
</div>
<div>
<div class="mobile-top"></div>
<div class="date">March 22, 2017 - 1:37</div>
</div>
И мой JS-код:
$(window).resize(function() {
if ($(window).width() < 600) {
$(".date").clone().appendTo(".mobile-top");
} else {
$(".mobile-top").empty();
};
}).resize();
Что я пытаюсь сделать, так это то, что когда размер броузера меньше 600 пикселей, содержимое .date
элемента перемещается в .mobile-top
элемент. В результате все три .date
элемента группируются и перемещаются в .mobile-top
каждый div и продолжают дублировать содержимое до тех пор, пока браузер не выйдет из строя.
Что я пытаюсь сделать, так это переместить .date
в .mobile-top
в каждом div, когда размер экрана меньше 600 пикселей.
Рабочий пример того, что я сделал до сих пор — https://jsfiddle.net/openbayou/f5qwhnp1 /
Ответ №1:
Вы просто допускаете одну ошибку, которую вы клонируете. .date
внутри window.resize
которого происходит непрерывное клонирование и добавление снова и снова вот мой код, который может вам помочь.
var date = $('.date').html(),
mobileTop = $('.mobile-top');
$(window).resize(function() {
if ($(window).width() < 600) {
$(mobileTop).html(date);
} else {
$(mobileTop).html('');
};
}).resize();
Комментарии:
1. разве это не заменит содержимое html при каждом изменении размера события? Не думаю, что это хорошая практика.
Ответ №2:
Просто проверьте, был ли элемент уже вставлен
window.addEventListener('resize', function() {
if (window.innerWidth < 600) {
document.querySelectorAll('.date').forEach(function(el) {
if (el.parentElement.classList.contains('mobile-top')) {
return
}
var parent = el.parentElement
var mobileTop = parent.querySelector('.mobile-top')
mobileTop.appendChild(el)
})
}
})
<div>
<div class="mobile-top"></div>
<div class="date">January 22, 2019 - 13:44</div>
</div>
<div>
<div class="mobile-top"></div>
<div class="date">December 2, 2018 - 3:10</div>
</div>
<div>
<div class="mobile-top"></div>
<div class="date">March 22, 2017 - 1:37</div>
</div>