Я пытаюсь переместить существующий элемент из одного места в DOM в другое. Я использую плагин для Chrome «Пользовательский Javascript и CSS», а страница, которой я управляю, — https://www.kappahl.com/sv-SE/rea/herr/rea/?
Я хочу переместить элемент span "product-card__percent--sale" ниже "grid-item__image-spacer". Но в сетке с идентификатором #Productlist ничего не происходит. И как сказано, теперь я схожу с ума.
Я знаю, что он создан в функции, и я должен проверить, выполнена ли функция, прежде чем вызывать элементы. Пока я пришел к этому моменту Верхняя линия в порядке, но не остальные продукты. В результате должно получиться так, что в правом нижнем углу каждого изображения товаров появится "знак" 50%.
У меня есть поиск во всех местах от Google до YouTube, но я не могу понять, что я делаю неправильно.
Я знаю, что просто создать переменную не получится, и я думал, что готовая функция сработает. Я также пробовал с длиной и т. д.
Я пробовал следующее:
let a = $(".product-card__percent--sale");
let b = $(".grid-item__image-spacer");
a.insertAfter(b);
А также:
$(document).ready(function(){
if ($(".product-card__percent--sale").insertAfter($("header .grid-item__image-spacer")));
});
Вот как мой код выглядит на данный момент
JS
$(".product-card__wrapper").each(function () {
var newprice = $(this).find('.product-card__percent--sale');
$(this).find('.grid-item__image-spacer').parent().after(newprice );
});
CSS:
/*Override the old grid*/
#ProductList {
grid-template-columns: repeat(4, 25%);
grid-gap: 18.5px;
}
/*Create sale-percent look*/
.product-card__percent--sale {
color: white;
background-color: #ee324c;
border-radius: 50%;
height: 65px;
width: 65px;
float: right;
margin-right: 10px;
margin-bottom: 10px;
text-align: center;
/* display:inline-block;*/
font-size: 18px;
padding: 20px 5px 5px 10px;
}
Трудно показать код, когда я просто редактирую существующую страницу. Извините за это, но если бы кто-то мог мне помочь, это было бы просто прекрасно! :)
Я думаю, что теперь его стало немного легче читать. Мой первый первый вопрос, поэтому он может стать лучше отсюда.
хорошо, вы отладили и посмотрели, находит ли он элементы? Я предполагаю, что он загружается динамически, а элемента там нет. Простой console.info(a.length, b.length) покажет это.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Обновлено: в соответствии с комментарием и обновленным кодом в вашем сообщении приведенный ниже код может соответствовать вашим потребностям.
$(function(){
setInterval(function() {
$(".product-card__percent--sale").each(function(){
$(this).closest(".product-card")
.find(".grid-item__image-spacer")
.append($(this));
});
}, 200);
})
или
$(function(){
setInterval(function() {
$(".product-card__wrapper").each(function () {
var newprice = $(this).find('.product-card__percent--sale');
$(this).find('.grid-item__image-spacer')
.parent().after(newprice );
});
}, 200);
})
оба должны работать.
А вот и ССС
/*Override the old grid*/
#ProductList {
grid-template-columns: repeat(4, 25%);
grid-gap: 18.5px;
}
/*Create sale-percent look*/
.product-card__percent--sale {
color: white;
background-color: #ee324c;
border-radius: 50%;
height: 65px;
width: 65px;
float: right;
margin-right: 10px;
margin-bottom: 10px;
text-align: center;
/* display:inline-block;*/
font-size: 18px;
padding: 20px 5px 5px 10px;
}
.grid-item__image-spacer{
position: relative;
}
.product-card__percent--sale{
position: absolute;
bottom: 0;
right: 0;
}
Вы должны запустить код после создания элементов dom и
let a = $(".product-card__percent--sale");
let b = $(".grid-item__image-spacer");
a.insertAfter(b);
вставит все числа ко всем изображениям, так что это может быть
setTimeout(function() {
$(".product-card__percent--sale").each(function(){
$(this).closest(".product-card__bottom--wrapper")
.find(".product-card__infoicons").prepend($(this));
});
}, 10);
или
setInterval(function() {
$(".product-card__percent--sale").each(function(){
$(this).closest(".product-card__bottom--wrapper").find(".product-card__infoicons").prepend($(this));
});
}, 200);
И вам понадобится это, чтобы установить положение
.product-card__percent--sale{
line-height: 25px;
left: 10px;
position: relative;
}
Рада что тебе понравилось! :) Я тоже думаю, что это действительно здорово. И ваше предложение почти реализовано, но оно все еще не имеет доступа к .product-card__percent--sale ниже. Он только добавляется к верхней линии. Так близко сейчас!
Я подумал, что вы хотели бы, чтобы он отображался в правом нижнем углу изображения, как только я увидел the bottom right corner of each image, в любом случае я отредактировал код, но его все еще нужно улучшить, так как вы можете видеть, что знак звезды закрыт числом.
Извините, что так плохо объясняю. Первый код сделал именно то, что я хотел, просто добавил изменение только в верхнюю строку. Не там, где отображаются все продукты, прямо под панелью навигации и рядом с боковой панелью.
Потому что эти продукты создаются динамически, когда пользователь прокручивает страницу вниз, но код срабатывает только один раз после загрузки страницы. Один из способов — выполнить код с помощью setInterval, но это всего лишь обходной путь, а не идеальное решение. Добавлю в пост.
Это сработало для вас? Если вы пробовали это? Для меня он сделал то же самое, что и другой, и я попытался изменить его, но все равно ничего не сделал. Я знаю, что это был крепкий орешек =(
Не могли бы вы предоставить JS и CSS, которые используются на изображении, которое вы публикуете выше? И кажется, вы хотели бы, чтобы они отображались в правом верхнем углу каждой картинки?
Я обновил вопрос кодом, который больше всего выглядит как результат, который я хочу. Обновленное изображение с новейшим кодом
поэтому, как вы говорите, вам нужно показать элемент под изображениями.
$(".product-card__wrapper").each(function () {
var newprice = $(this).find('.product-card__percent--sale');
$(this).find('.grid-item__image-spacer').parent().after(newprice );
});
Прежде всего, получите все необходимые элементы. затем укажите, какие элементы вы хотите изменить (новая цена). тогда вы можете изменить их. У меня нет источника, чтобы попробовать, но я думаю, что это будет работать нормально. Если это не работает, попробуйте .parent(), чтобы увидеть, какой элемент получает jquery. Надеюсь, это поможет.
Он сделал именно то, что я хотел в верхней строке, но по-прежнему не получил доступ к другим продуктам, которые динамически создаются под панелью навигации. Моя проблема такая же, у меня нет источника, только домашняя страница и инспектор, а затем я использую плагин для Chrome, о котором я упоминал в вопросе.
@LittleStarJenny, ты имеешь в виду часть REAFAVORITER? Да, вы не можете изменить их, потому что класс ниже панели навигации отличается. если вы хотите, чтобы функция работала для всех из них, добавьте к ним собственный класс, и снова, если вы не можете изменить основной код, измените свои селекторы, я думаю, что все они есть в статье.
$("статья").каждый(функция () {
Прочтите Как спросить. Немного отформатируйте свой вопрос, чтобы он улучшил читабельность