.val().length: как правильно проверить наличие какого-то значения (текста) внутри блока?

377
12 декабря 2016, 10:15

Здравствуйте!

Подскажите, пожалуйста, как правильно проверить наличие какого-то значения (текста) внутри блока.

Есть блоки div с классом .product-wrapper (таких блоков много), внутри этого блока, есть старая цена .old-price. Как сделать так: если у товара нет старой цены, к родителю .product-wrapper добавлялся бы новый класс, например .new?

Написал код, но он не работает:

    $('.product-wrapper').each(function () {
        if ($(this).find('.old-price').val().length) {
            $(this).parents('.product-wrapper').addClass("new");
        }
    });

Структура:

<div class="products-wrapper">
    <div class="product-wrapper">
        <div class="old-price">2500 руб.</div>
    </div>
    <div class="product-wrapper">
        <div class="old-price">старой цены нет, нужно проверить, что здесь пустота</div>
    </div>
    <div class="product-wrapper">
        <div class="old-price">6750 руб.</div>
    </div>
</div>
Answer 1

@jsp, это уже ближе к правде. Надеюсь, что "здесь старой цены нет" - это только для примера, в реальных условиях там пусто.

$('.old-price').each(function(i, el){
    if( $.trim( $(el).text() ) == '' ) {
       $(el).parent('.product-wrapper').addClass('new');
    }
});
Answer 2

Что-то вы явно не то написали, $(this).find('.old-price').val().length вернёт длину значения поля .old-price

А вам, насколько я понял, надо проверять наличие этих полей, точнее их отсутствие.

Значит вам надо использовать !$(this).find('.old-price') или $(this).find('.old-price').length === 0

То бишь вот такой примерно код должен работать:

$('.product-wrapper').each(function () {
    if ($(this).find('.old-price').length === 0) {
        $(this).parents('.product-wrapper').addClass("new");
    }
});
READ ALSO
Передача данных клиенту

Передача данных клиенту

Как осуществляется передача данных клиенту от сервера?

278
Получить значения input через Jquery

Получить значения input через Jquery

Всем приветПодскажите, пожалуйста, как можно получить значение input через jquery, но только в нужном блоке

451