jquery устанавливает класс для дочерних элементов определенного типа

StackOverflow https://stackoverflow.com/questions/3640312

Вопрос

У меня есть метка выноски, связанная с несколькими элементами управления, которая должна стать красной, если какой-либо из них неправильный.

<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="" атрибут и измените для них класс.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top