#jquery
#jquery
Вопрос:
У меня есть таблица с выпадающим списком в одном столбце и скрытыми разделениями в следующем столбце. В зависимости от значения выпадающего списка должен отображаться только один DIV в следующем столбце.
Вот макет, который у меня есть. Я смог настроить таргетинг на следующий <td>
, но мне не повезло с фактическим <div>
внутри <td>
.
Я не получаю никаких ошибок jquery. Спасибо!
...
<tr>
<!–– Dropdown column ––>
<td>
<select class="dropdown">
<option value="firstDiv">Show First</option>
<option value="secondDiv">Show Second</option>
</select>
</td>
<!–– Column with hidden/visible Divs we are targeting ––>
<td>
<div class="firstDiv">First Div</div>
<div class="secondDiv">Second Div</div>
</td>
</tr>
<tr>
<!–– Dropdown column ––>
<td>
<select class="dropdown">
<option value="firstDiv">Show First</option>
<option value="secondDiv">Show Second</option>
</select>
</td>
<!–– Column with hidden/visible Divs we are targeting ––>
<td>
<div class="firstDiv">First Div</div>
<div class="secondDiv">Second Div</div>
</td>
</tr>
...
$('.dropdown').change(function() {
id = this.id;
value = $(this).val();
$(this).closest("td > .firstDiv").next().hide(); //First hide everything, even if already hidden
$(this).closest("td > .secondDiv").next().hide(); //First hide everything, even if already hidden
$(this).closest("td > ." value).next().toggle(); //Show the chosen one
})
Ответ №1:
Вы можете попробовать выбрать следующим образом $(this).closest("tr").find("td .firstDiv").hide()
. Таким образом, вы найдете tr
элемент, который содержит выпадающий список, а затем вы найдете в той же строке нужный класс внутри td
.
$(".firstDiv").hide();
$(".secondDiv").hide();
$('.dropdown').change(function() {
value = $(this).val();
$(this).closest("tr").find("td .firstDiv").hide(); //First hide everything, even if already hidden
$(this).closest("tr").find("td .secondDiv").hide(); //First hide everything, even if already hidden
$(this).closest("tr").find("td ." value).toggle(); //Show the chosen one
})
<table>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<tr>
<!–– Dropdown column ––>
<td>
<select class="dropdown">
<option value="firstDiv">Show First</option>
<option value="secondDiv">Show Second</option>
</select>
</td>
<!–– Column with hidden/visible Divs we are targeting ––>
<td>
<div class="firstDiv">First Div</div>
<div class="secondDiv">Second Div</div>
</td>
</tr>
<tr>
<!–– Dropdown column ––>
<td>
<select class="dropdown">
<option value="firstDiv">Show First</option>
<option value="secondDiv">Show Second</option>
</select>
</td>
<!–– Column with hidden/visible Divs we are targeting ––>
<td>
<div class="firstDiv">First Div</div>
<div class="secondDiv">Second Div</div>
</td>
</tr>
</table>
Ответ №2:
Установите div display:none
и используйте jquery hide()
и show()
для отображения выбранного элемента.В моем коде я изначально отобразил ‘FirstDiv’, потому что опция по умолчанию в поле выбора — ‘Показать первым’, иначе вы можете добавить display:none
в оба div в css. Надеюсь, это поможет
$('.dropdown').change(function(e){
$(this).parent().next().find('.' $(this).val()).show().siblings().hide()
})
.secondDiv
{
display:none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tbody>
<tr>
<!–– Dropdown column ––>
<td>
<select class="dropdown">
<option value="firstDiv">Show First</option>
<option value="secondDiv">Show Second</option>
</select>
</td>
<!–– Column with hidden/visible Divs we are targeting ––>
<td>
<div class="firstDiv">First Div</div>
<div class="secondDiv">Second Div</div>
</td>
</tr>
<tr>
<!–– Dropdown column ––>
<td>
<select class="dropdown">
<option value="firstDiv">Show First</option>
<option value="secondDiv">Show Second</option>
</select>
</td>
<!–– Column with hidden/visible Divs we are targeting ––>
<td>
<div class="firstDiv">First Div</div>
<div class="secondDiv">Second Div</div>
</td>
</tr>
</tbody>
</table>