Как использовать дочерний селектор jquery (>) с переменной?

0

У меня есть две таблицы опций с переключателями. Первый содержит соусы (marinara, bbq и т.д.). Второй содержит количество соуса (регулярное, дополнительное и т.д.). Количество соуса имеет три варианта: левое, цельное и правое.

Изображение 174551

HTML грязный и сгенерированный CMS, который у меня не имеет доступа к изменениям, поэтому я застрял в работе с тем, что у меня есть.

Когда пользователь выбирает соус, отличный от Marinara, параметры количества соуса, кроме обычного, должны быть скрыты.

Изображение 174551

У меня есть (уродливый) jquery, который скрывает варианты количества соуса, а затем повторно отображает опцию обычного соуса, но отображает всю строку, включая левую и правую переключатели. Мне нужно скрыть левую и правую радиокнопки, но удерживайте кнопку центра (целое).

Код для таблицы довольно большой; У меня скрипка здесь, который содержит больший кусок, чем я отправляю здесь.

Это то, что выглядит соус:

<tr class="pb-radio">
        <td class="pb-radio-label pb-highlight"><label>Marinara Sauce</label></td>
        <td class="pb-left">
            <div class="">
                <input type="radio" name="sauce_flavor.left" class="pb-radio-sauce pb-marinara-sauce">
            </div>
        </td>
        <td class="pb-whole">
            <div class="pb-highlight">
                <input type="radio" checked="" name="sauce_flavor.whole" class="pb-radio-sauce pb-marinara-sauce">
            </div>
        </td>
        <td class="pb-right">
            <div class="">
                <input type="radio" name="sauce_flavor.right" class="pb-radio-sauce pb-marinara-sauce">
            </div>
        </td>
    </tr>
    <tr class="pb-radio">
        <td class="pb-radio-label "><label>Garlic Parm Sauce*</label></td>
        <td class="pb-left">
            <div class=""> </div>
        </td>
        <td class="pb-whole">
            <div class="">
                <input type="radio" name="sauce_flavor.whole" class="pb-radio-sauce pb-sauce-no-size-allowed">
            </div>
        </td>
        <td class="pb-right">
            <div class=""></div>
        </td>
    </tr>

Здесь jQuery:

$('.pb-sauce-no-size-allowed').live('change', function() {
    // need to hide all radio buttons plus parent labels, except for Regular Sauce
    $('.pb-radio-sauce-size').closest('tr').hide();
    var x =  $('td.pb-radio-label>label:contains("Regular Sauce")').closest('tr');
    x.show();
    console.log($(x > 'td.pb-left'));
    console.log($('x > td.pb-left'));
    console.log($(x) > 'td.pb-left');
});

$('.pb-marinara-sauce').live('change', function() {
    $('.pb-radio-sauce-size').closest('tr').show();
});

В первой функции x корректно, и x.show() работает. Но когда я пытаюсь получить два элемента td, все попытки возвращают либо пустой объект, либо false.

Как я могу получить дочерние элементы переменной? Или есть лучший способ сделать это?

Теги:
jquery-selectors

2 ответа

5
Лучший ответ

Вы можете использовать .children()

x.children('td.pb-left');


Прокомментировал jasper
x.find(" > td.pb-left")
  • 0
    @Jasper Добавьте ваш комментарий к ответу :)
  • 0
    здесь нет причины использовать find (), комментарий Джаспера был просто для того, чтобы показать, как это можно сделать, используя '>', но только потому, что OP попросил об этом
Показать ещё 2 комментария
0

Альтернативно, $('td.pb-left', x);

Это в основном "найти td.pb-left в контексте x

Он будет соответствовать всем потомкам x, а не только ближайшим детям, таким как селектор >.

  • 0
    Это не то же самое, что дочерний > селектор, но $('> td.pb-left', x); может работать. Не хорошо использовать IMO.
  • 0
    Правда. Это были бы не просто непосредственные дети, но для этого приложения они должны вести себя одинаково. Если нет вложенных элементов.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню