jquery устанавливает класс для дочерних элементов определенного типа
-
30-09-2019 - |
Вопрос
У меня есть метка выноски, связанная с несколькими элементами управления, которая должна стать красной, если какой-либо из них неправильный.
<tr>
<th>
<asp:Label for="test">jquery will make my class as updnValidationErrorLabel</asp:Label>
</th>
<td > this text is right
<asp:TextBox class='textboxWide taskListCheckPreVital' />
</td>
<td>this is wrong text hence it has updnValidationErrorInput
<asp:TextBox class='dummyclass updnValidationErrorInput'/></td>
</tr>
Я пробую этот подход, но не уверен, почему дочерний элемент основного родителя не отображается в классе. updnValidationErrorInput
//if my sturcture has updnValidationErrorInput
$('.updnValidationErrorInput').each(function() {
// go to tr element
var mainParent = $(this).parents('tr:first');
// under tr element find updnValidationErrorInput
if(mainParent.children('.updnValidationErrorInput').length > 0){
// set label which has for attribute with updnValidationErrorLabel
mainParent.children('label').attr('for').removeClass().addClass('updnValidationErrorLabel');
}
});
Любая помощь будет оценена.
Решение
Поскольку ты придешь от тот <input>
тот .length
чеки должен быть правдой, поэтому вы можете удалить их.Вы можете сократить его до следующего:
$('.updnValidationErrorInput').each(function() {
$(this).cloesest('tr').find('label[for]')
.removeClass().addClass('updnValidationErrorLabel');
});
Вместо .parents('tr:first')
вы можете использовать эквивалент (и дешевле) .closest()
, затем найдите любой <label>
элементы с for=""
атрибут и измените для них класс.
Не связан с StackOverflow