这应该很简单,但我真的被卡住了。
我有一个填充了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>
答案 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