2012-03-21 6 views
3

の私はセットアップを持っている:私は知っている、このような混乱何かどのようにすべての子供たちと子供たちの子供たちを検索するなど、親のdiv

<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を動的に生成することは明らかです。私がしようとしているのは、 "Content"とラベル付けされたdivのレベルで始まり、すべての子を(再帰的に)検索して、指定された各コントロールの値を見つけるオブジェクトを作成することです。この例では、OuterTextBoxとInnerComboBoxです。私を混乱させているのは、要素のばかげた階層です。どのようにこれを最も効率的に行うのですか?私はただちに道路を下っていくと仮定することができます、divの階層構造に変化があるので、私が何かを動かすとすぐに壊れない何かを得ることを望んでいるので、コントロールへの明示的なパスは行っていません働くここで私は、現在に拡大しようとしているコンセプトは次のとおりです。

function ClientIDS(obj) { 

    var txt = $(obj).prevAll('input[id*="txtTextBox"]:first'); 
    alert($(txt).val()); 

    return false; 
} 

私は、サーバーコントロールのOnClientClick =「ClientIDが(この)」のような何かをするだろう。

このコードは、シンプルでクリーンで、すべてのコントロールが同じdivにある(兄弟として)ときに完全に機能しました。このようなdivでコントロールが分割されると、誰もが同様の単純な方法でコントロールを見つける方法を考え出すことができますか?

+0

フォームに入れると、フォームの* elements *コレクションのプロパティとしてアクセスできます。 – RobG

答えて

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

これで、クリックされたボタンと同じコンテナにあるテキストボックスが表示されます。

+0

これは完璧に聞こえる、私はそれを試してみよう – Sinaesthetic

+0

作品!私はそれが簡単だと分かっていましたが、セレクタがDOMをどのようにして後方に働くかはまだ分かっています。ありがとう:) – Sinaesthetic

0

私が正しくあなたを理解していれば、あなたは試みることができる:

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

inputセレクタは、明らかに、このような特定のクラスとして、他のセレクタに置き換えることができます。

+0

divはアイテムテンプレートに入っていますので、コンパイル時にも同様に – Sinaesthetic

+0

という名前が生成されますが、その上で作業するようにしてください – Sinaesthetic

+0

これにクラスを付けて、IDの代わりにセレクタとして使うのはどうですか? –