如何搜索父div的所有孩子和孩子的孩子等

时间:2012-03-21 22:31:44

标签: javascript jquery asp.net

我有一个设置,有点令人困惑:

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

Wonky我知道,这只是一个模型。真实情况更糟。这是一个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分解时,有没有人能想出一种方法来以类似的,简单的方式找到控件?

2 个答案:

答案 0 :(得分:3)

通常的方法是在同一个容器中找到与您相同的其他项目,但不一定是兄弟姐妹是使用.closest()找到所需的共同祖先constainer,然后使用.find()找到您的实际元素'正在使用类名在该容器中查找。

我不确定你的点击开始的确切位置,但是假设你有多个来自这个itemTemplate的项目我已修改为有几个类:

<ListView>
    <ItemTemplate>
        <div class="Content">
            <asp: TextBox ID="OuterTextBox" class="textbox"/>
            <div id="Controls">
                <asp: ComboBox ID="InnerComboBox"/>
            </div>
            <div>
                <asp: Button ID="Submit" />
            </div>
        </div>
    </ItemTemplate>
    <ItemTemplate>
        <div class="Content">
            <asp: TextBox ID="OuterTextBox" class="textbox"/>
            <div id="Controls">
                <asp: ComboBox ID="InnerComboBox"/>
            </div>
            <div>
                <asp: Button ID="Submit" />
            </div>
        </div>
    </ItemTemplate>
<ListView>

然后,从提交按钮,您可以使用:

$(this).closest(".Content").find(".textbox")

这将为您提供与单击按钮位于同一容器中的文本框。

答案 1 :(得分:0)

如果我理解正确,你可以尝试:

$('#content').find('input').each(function(){
      //do something
});

input选择器显然可以替换为其他选择器,例如某个类。