У меня есть две таблицы опций с переключателями. Первый содержит соусы (marinara, bbq и т.д.). Второй содержит количество соуса (регулярное, дополнительное и т.д.). Количество соуса имеет три варианта: левое, цельное и правое.
HTML грязный и сгенерированный CMS, который у меня не имеет доступа к изменениям, поэтому я застрял в работе с тем, что у меня есть.
Когда пользователь выбирает соус, отличный от Marinara, параметры количества соуса, кроме обычного, должны быть скрыты.
У меня есть (уродливый) 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.
Как я могу получить дочерние элементы переменной? Или есть лучший способ сделать это?
Вы можете использовать .children()
x.children('td.pb-left');
x.find(" > td.pb-left")
Альтернативно, $('td.pb-left', x);
Это в основном "найти td.pb-left
в контексте x
Он будет соответствовать всем потомкам x, а не только ближайшим детям, таким как селектор >
.
>
селектор, но $('> td.pb-left', x);
может работать. Не хорошо использовать IMO.