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

Рейтинг: 0Ответов: 2Опубликовано: 08.03.2015

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

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

Есть блоки 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>

Ответы

▲ 2Принят

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

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

Что-то вы явно не то написали, $(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");
    }
});