jQuery DOM导航 - 选中复选框后找到下一个标签

时间:2016-06-21 14:58:11

标签: jquery asp.net dom

这应该很简单,但我真的被卡住了。

我有一个填充了asp.net转发器的表元素。我的用户检查一个或多个复选框,我的jQuery循环遍历它们以查找相关的标签文本。我有这个工作,但我改变了我的桌子的组织,现在我似乎无法让它再次工作。

我的HTML:

<table class="c _table">
    <asp:Repeater ID="rptData" runat="server">
    <HeaderTemplate>
    <tr>
        <th>
            <asp:Image runat="server" CssClass="c_imgPlusMinus" ImageUrl="Images/plus.jpg" />
        </th>
        <th>
            <asp:CheckBox ID="chkConAll" runat="server"/>Select Data
        </th>      
    </tr>    
    </HeaderTemplate>
    <ItemTemplate>
    <tr>
        <td >
        </td>
        <td>
            <asp:CheckBox runat="server" cssclass="cd_chk" /><asp:Label runat="server" Text='<%#Eval("DataName") %>' /> 
        </td>
    </tr>
    </ItemTemplate>
    </asp:Repeater>                  
</table>

我的jQuery:

var wholeString= '';
$('.cd_chk :checkbox:checked').each(function () {
    wholeString = $(this).next('label').text();

    (do some stuff with wholeString)

});

但是我一直在用这种方式对它进行一个小时或更长时间的纠缠,我似乎无法从转发器中的标签中取出文本。

This post是我在这篇文章中得到语法的地方($(this).next('label')。text();),但是这个和我尝试的其他任何东西似乎都没有用。

感谢您的帮助。

编辑:根据建议,这是我的代码生成的实际标记。转发器产生两行:

<table class="c_analyte_table">
<tr>
<th>
<img class="c_imgPlusMinus" src="Images/plus.jpg" />
</th>
<th>
<input id="chkConAll" type="checkbox" name="ctl00$MainContent$rptConventionals$ctl00$chkConAll" />
Conventionals 
</th>      
</tr>    
<tr class="cd_chemRow">
<td >
</td>
<td>
<span class="cd_chkLab"><input id="" type="checkbox" name="ctl00$MainContent$rptConventionals$ctl01$ctl00" /></span><span>Total Suspended Solids, Particulate</span> 
</td>
</tr>
<tr class="cd_chemRow">
<td >
</td>
<td>
<span class="cd_chkLab"><input id="" type="checkbox" name="ctl00$MainContent$rptConventionals$ctl02$ctl00" /></span><span>Total Suspended Solids, Total</span> 
</td>
</tr>   
</table> 

1 个答案:

答案 0 :(得分:3)

默认情况下,span控件呈现为AssociatedControlID HTML元素。仅当此控件设置了属性label时才会将其呈现为实际label

您没有设置此属性,因此查询span将根本不会提供任何内容。您需要查询Checkbox

还要考虑到<span><input></span>呈现为wholeString = $(this).parent().next('span').text(); ,因此输入元素本身没有兄弟,您需要首先访问其父级。

总而言之:

<Label CssClass="checkboxLabel" .../>

另一种解决方案,也许更简单一种,就是将一些类分配给Label。它不需要在任何CSS中定义,因为它将仅作为查询的区别。例如,您可以说:

wholeString = $(this).parent('td').find('.checkboxLabel').text();

该查询将独立于ASP.NET呈现引擎的详细信息:

identity