Выберите следующий <td> в таблице, используя jQuery
Я работаю над приложением asp.net mvc 3. Я динамически строю таблицу с данными из базы данных. У меня есть определенный случай, когда третий столбец/ячейка из строки является выпадающим списком:
<select name="YesNoNotApplicable" class="YesNoNotApplicable">
<option value="1">Yes</option>
<option value="2">No</option>
<option value="3">Not Applicable</option>
</select>
В этом случае четвертый столбец/ячейка остается пустым, и если пользователь выбирает 3 (Не применимо) в четвертой ячейке, должен быть показан текстовое поле, в котором пользователь может написать дополнительную информацию. У меня плохое знание JS и jQuery, однако я узнаю, как получить выбранное значение из выпадающего списка:
$(document).ready(function () {
$('.YesNoNotApplicable').change(function () {
alert($('.YesNoNotApplicable').val());
});
});
Но теперь вместо этого мне нужно проверить, является ли это значение 3 (это далеко не все), чтобы показать/скрыть или добавить/удалить текстовое поле из следующей ячейки или если мы поговорим в DOM prespective.
Итак, как я могу перейти к следующему классу с классом = YesNoNotApplicable и как лучше всего справиться с этим текстовым полем - поместить его во время создания таблицы, а затем показать/скрыть ее или обрабатывать его во время выполнения и добавлять/удалять его и как я могу это сделать?
Ответы
Ответ 1
Если вы используете сильно типизированные модели и html-помощники для вашего представления, было бы лучше создать элемент ввода при создании таблицы. Причина в том, что элементы, которые вы создадите с помощью jQuery, не будут привязаны к вашей модели.
$(document).ready(function () {
$('.YesNoNotApplicable').change(function () {
if($(this).val() === "3")
$(this).closest('td').next('td').find('input').show();
});
});
Ответ 2
В обратном вызове change
this
будет ссылаться на элемент select
. Таким образом, вы можете найти td
, содержащий его с closest
, а затем следующий td
через next
(так как вы знаете, что следующая вещь - это td
, это таблица), например:
var $nextTD = $(this).closest('td').next();
В более общем случае, когда вы хотите сделать что-то подобное, но не в таблице, и родной брат, который вы хотите найти, может быть более одного элемента, вы можете использовать nextAll("selector").first()
. Но если вещь, которую вы хотите, является следующим элементом, и вы в этом уверены, вам не нужно nextAll
.
Ответ 3
$(document).ready(function () {
$('.YesNoNotApplicable').change(function () {
if($(this).val() === "3"){
$(this).closest('td').next('td').find('input:text').show();
}
});
});
Ответ 4
var nextCell = $(this).closest('td').next();
И затем вы можете работать со следующим cel.
Ответ 5
Вы также можете использовать метод siblings()
чтобы получить следующий td
тег
$(document).ready(function () {
$('.YesNoNotApplicable').change(function () {
if($('.YesNoNotApplicable').val() == '3'){
$(this).closest('td').siblings().find('input').show();
}
});
});
$(document).ready(function () {
$('.YesNoNotApplicable').change(function () {
if($('.YesNoNotApplicable').val() == '3'){
$(this).closest('td').siblings().find('input').show();
}
});
});
#notapplicable{
display:none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td><select name="YesNoNotApplicable" class="YesNoNotApplicable">
<option value="1">Yes</option>
<option value="2">No</option>
<option value="3">Not Applicable</option>
</select></td>
<td><input type='text' id='notapplicable' /></td>
</tr>
</table>