【发布时间】:2012-02-28 04:04:34
【问题描述】:
我在中继器中有一张桌子。数据被输入到表中,并且根据加载的数据类型为每一行分配一个类。例如:
<table id="detail-table">
<tr class="typeA">
<td>Value</td>
</tr>
<tr class="typeB">
<td>Value</td>
</tr>
<tr class="typeC">
<td>Value</td>
</tr>
<tr class="typeB">
<td>Value</td>
</tr>
<tr class="typeA">
<td>Value</td>
</tr>
</table>
表格是折叠的表格。 typeA 是标头,typeB 是 typeA 的子代,typeC 是 typeB 的子代。在表示例中,typeA 有两个直接的孩子,第一个孩子也有一个孩子。
当用户点击 typeA 时,会出现两个 typeB 行,当 typeB 有子项时,它也会展开以显示 typeC 行。我有一个事件处理程序可以在点击时执行此操作。
我需要为具有特定值的项目应用完整的细节扩展(typeA 到 typeC)。当 typeA 中单元格的值等于从查询字符串接收到的值时,我需要在父级和该父级的所有子级上触发展开事件。我已经有一些代码可以做到这一点。但是,我觉得这有点像黑客。我想知道是否有人有一些建议?这是我目前所拥有的。
$(function() {
var tableRows = $('#detail-table').find("tr:gt(0)");
$(tableRows).each(function(i, val) {
//ExpandValue is a value in my C# page.
if ($.trim(val.cells[0].innerText) == '<%= ExpandValue %>'){
expandRows(i);
}
}
function expandRows(startIndex) {
// Expand the first row, the typeA class
// row that matches the value
$(tableRows[startIndex]).trigger('expand');
startIndex += 1;
while($(tableRows[startIndex]).attr("class") != "typeA"){
$(tableRows[startIndex]).trigger('expand');
startIndex++;
}
}
});
这会找到表的所有行。然后循环遍历表行数组。该条件检查每行中第一个单元格的 innerText。如果单元格的 innerText 与 ExpandValue 匹配,则已找到目标行。将此行的索引发送到 expandRows 函数。在expandRows 函数中,展开startIndex 处的行,这是与ExpandValue 匹配的typeA 类行。然后将 startIndex 加一以指向下一行。 while 循环检查每一行的类。在每一行上触发展开事件,直到命中下一个 typeA 行。这有效并正确扩展了每一行。但同样,我是 jquery 的新手,我觉得可能有一些方法可以更好地完成此任务。有什么想法吗?
【问题讨论】:
标签: javascript jquery jquery-selectors