если у div есть содержимое для изменения класса — три случая

#javascript #jquery

#javascript #jquery

Вопрос:

У меня есть три возможных случая для div — у него либо есть class .first или .last, либо нет.

Мне нужно изменить содержимое другого div на основе этих классов, но я делаю что-то не так…

Может кто-нибудь помочь мне и сказать, что я делаю не так?

 jQuery(document).ready(function ()  {

    if (jQuery('.pricing-plan').hasClass('first')) {
        jQuery('.tagline').text('primeiro');
    }
    else if (jQuery('.pricing-plan').hasClass('last')) {
        jQuery('.tagline').text('ultimo');
    }
    else {
        jQuery('.tagline').text('nada');
    }

});
  

Комментарии:

1. Опубликуйте скрипку или свою структуру HTML

2. Я не вижу никаких ошибок в опубликованном коде jQuery.

3. Вы все делаете правильно

4.Единственный случай, когда это не сработает: если вы назначили класс динамически, после DOMContentLoaded того, как он уже был запущен.

5. @JoakimM Конечно. Но DOM можно манипулировать после того, как этот скрипт уже выполнен. @shaunakde — о да, у него может быть несколько .pricing-plan элементов, некоторые из них с классом, другие без класса .first / .last

Ответ №1:

Обновленная демонстрация

  • У вас есть несколько элементов с классом .pricing-plan и .tagline . В таких случаях вы должны использовать .each() для перебора каждого элемента.
  • Внутри каждого, чтобы получить контекст текущего .pricing-plan использования $(this)

  • В вашем текущем коде селектор jQuery('.pricing-plan') только что вернулся / проверен первым .pricing-plan


Проверьте это,

 jQuery(document).ready(function () {
    jQuery('.pricing-plan').each(function () {

        if (jQuery(this).hasClass('first')) {
            jQuery(this).find('.tagline').text('primeiro');
        } else if (jQuery(this).hasClass('last')) {
            jQuery(this).find('.tagline').text('ultimo');
        } else {
            jQuery(this).find('.tagline').text('nada');
        }
    });

});
  

Комментарии:

1. ОТЛИЧНО!! Спасибо!! Можете ли вы сказать мне, что я делал не так?

2. Добавил точки в ответ, у вас было несколько классов с одинаковыми именами.