【问题标题】:jquery set class for a children of particular typejquery为特定类型的孩子设置类
【发布时间】:2010-09-04 17:49:57
【问题描述】:

我有与多个控件关联的标注标签,当其中任何一个出现错误时,它应该会变为红色。

<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>
​

我正在尝试这种方法,但不确定为什么 mainparent 子元素不显示类 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');        
  }
});

任何帮助将不胜感激。

【问题讨论】:

  • -1 表示问题中格式错误、不可读的代码。
  • 但仍然无法弄清楚你想在这里实现什么......:-\
  • 您好,很抱歉无法正确传达。我有与两个输入控件相关联的标签。我在整个页面都有类似的结构。当出现问题时,我的验证器会将任一输入控件设置为 updnValidationErrorInput 类。当任一输入错误时,我正在尝试使用 updnValidationErrorLabel 类使标签与输入控件相关联。并且共同Label判断是否在tr中。

标签: asp.net jquery jquery-traversing


【解决方案1】:

由于您来自&lt;input&gt;.length 检查必须为真,因此您可以删除它们。你可以把它缩短到这个整体:

$('.updnValidationErrorInput').each(function() {
   $(this).cloesest('tr').find('label[for]')
          .removeClass().addClass('updnValidationErrorLabel');
});

您可以使用等效(并且更便宜).closest() 而不是.parents('tr:first'),然后找到任何具有for="" 属性的&lt;label&gt; 元素并更改它们的类。

【讨论】:

  • 嗨,尼克,.parents()closest() 有什么区别??
  • @Avinash - .parents() 抓取所有父母,如果给定一个选择器,则 then 过滤,给它一个 :first 使它成为第一个,因为它们在上升 DOM 的顺序。 .closest() 爬上 DOM 并在找到选择器匹配后立即停止,在这种情况下结果相同,是更有效的方法。父母越多,.closest() 的储蓄就越多。
猜你喜欢
  • 1970-01-01
  • 2012-05-10
  • 2020-04-10
  • 1970-01-01
  • 2019-04-02
  • 2012-10-06
  • 2012-04-16
  • 1970-01-01
相关资源
最近更新 更多