我有一个配置,类似这样令人困惑的东西:
<ListView>
<ItemTemplate>
<div id="Content">
<asp: TextBox ID="OuterTextBox" />
<div id="Controls">
<asp: ComboBox ID="InnerComboBox"/>
</div>
<div>
<asp: Button ID="Submit" />
</div>
</div>
</ItemTemplate>
<ListView>
我知道这有点奇怪,这只是一个模型。实际情况更糟。这是一个ItemTemplate,因此在编译页面时显然会动态生成ID。我想做的是使用jquery创建一个对象,从标记为“Content”的div级别开始,然后递归地搜索其所有子元素以查找每个指定控件的值。在这个示例中,它们是OuterTextBox和InnerComboBox。令我困惑的是元素的荒谬层次结构。我如何最有效地做到这一点?我只能假设不久之后,div的层次结构将发生变化,因此我希望得到的内容不会因为移动某些内容而立即崩溃,因此对控件的显式路径不起作用。以下是我目前正在尝试扩展的概念:
function ClientIDS(obj) {
var txt = $(obj).prevAll('input[id*="txtTextBox"]:first');
alert($(txt).val());
return false;
}
我会这样做:在服务器控件中添加 OnClientClick="ClientIDS(this)"。
当所有控件都在同一个 div 中(作为兄弟元素)时,此代码简单干净,完美运行。当控件被拆分到类似于这样的 div 中时,有人能想出一种类似且简单的方法来查找控件吗?