Переместить элемент, созданный в функции, при манипулировании существующей страницей

Я пытаюсь переместить существующий элемент из одного места в 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;
}

Трудно показать код, когда я просто редактирую существующую страницу. Извините за это, но если бы кто-то мог мне помочь, это было бы просто прекрасно! :)

Прочтите Как спросить. Немного отформатируйте свой вопрос, чтобы он улучшил читабельность

Krishna Prashatt 17.07.2019 08:57

Я думаю, что теперь его стало немного легче читать. Мой первый первый вопрос, поэтому он может стать лучше отсюда.

LittleStarJenny 17.07.2019 09:12

хорошо, вы отладили и посмотрели, находит ли он элементы? Я предполагаю, что он загружается динамически, а элемента там нет. Простой console.info(a.length, b.length) покажет это.

epascarello 18.07.2019 23:45
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
166
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Обновлено: в соответствии с комментарием и обновленным кодом в вашем сообщении приведенный ниже код может соответствовать вашим потребностям.

$(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 ниже. Он только добавляется к верхней линии. Так близко сейчас!

LittleStarJenny 17.07.2019 12:13

Я подумал, что вы хотели бы, чтобы он отображался в правом нижнем углу изображения, как только я увидел the bottom right corner of each image, в любом случае я отредактировал код, но его все еще нужно улучшить, так как вы можете видеть, что знак звезды закрыт числом.

Hikarunomemory 17.07.2019 12:39

Извините, что так плохо объясняю. Первый код сделал именно то, что я хотел, просто добавил изменение только в верхнюю строку. Не там, где отображаются все продукты, прямо под панелью навигации и рядом с боковой панелью.

LittleStarJenny 17.07.2019 20:05

Потому что эти продукты создаются динамически, когда пользователь прокручивает страницу вниз, но код срабатывает только один раз после загрузки страницы. Один из способов — выполнить код с помощью setInterval, но это всего лишь обходной путь, а не идеальное решение. Добавлю в пост.

Hikarunomemory 18.07.2019 01:16

Это сработало для вас? Если вы пробовали это? Для меня он сделал то же самое, что и другой, и я попытался изменить его, но все равно ничего не сделал. Я знаю, что это был крепкий орешек =(

LittleStarJenny 18.07.2019 09:18
Это то, что я вижу. , возможно, что-то не так с вашим кодом, или я, вероятно, снова неправильно понял. (не носитель английского языка)
Hikarunomemory 18.07.2019 12:05
связь Вот как это выглядит для меня. Линия верха в порядке, осталось немного стайлинга, но после меня все точно так же, как было раньше. (Я тоже не очень хорошо пишу по-английски)
LittleStarJenny 18.07.2019 19:43

Не могли бы вы предоставить JS и CSS, которые используются на изображении, которое вы публикуете выше? И кажется, вы хотели бы, чтобы они отображались в правом верхнем углу каждой картинки?

Hikarunomemory 19.07.2019 01:25

Я обновил вопрос кодом, который больше всего выглядит как результат, который я хочу. Обновленное изображение с новейшим кодом

LittleStarJenny 19.07.2019 10:28

поэтому, как вы говорите, вам нужно показать элемент под изображениями.

$(".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 19.07.2019 08:22

@LittleStarJenny, ты имеешь в виду часть REAFAVORITER? Да, вы не можете изменить их, потому что класс ниже панели навигации отличается. если вы хотите, чтобы функция работала для всех из них, добавьте к ним собственный класс, и снова, если вы не можете изменить основной код, измените свои селекторы, я думаю, что все они есть в статье.

Shervin Ivari 19.07.2019 20:45

$("статья").каждый(функция () {

Shervin Ivari 19.07.2019 20:45

Другие вопросы по теме