div要素(jQuery)のすべての子入力を取得する方法


158

HTML:

<div id="panel">
  <table>
    <tr>
       <td><input id="Search_NazovProjektu" type="text" value="" /></td>
    </tr>
    <tr>
       <td><input id="Search_Popis" type="text" value="" /></td>
    </tr>
  </table>
</div>

特定のdivのすべての入力を選択する必要があります。

これは機能していません:

var i = $("#panel > :input");

回答:


301

大なり記号なしで使用:

$("#panel :input");

>手段だけダイレクトあなたはすべての子供たちが何の深さをかまいたくない場合は要素の子供たちは、単にスペースを使用しています。


3
興味深い...今、私は混乱しています...これ:は疑似クラス用ですよね。ただし、要素タイプを選択します。なぜ:
mnemosyn

11
@mnemosyn-これは `:checkbox 'のような別のタイプのセレクターです。詳細はここを参照してください:api.jquery.com/input-selector そして、これらのより完全なリストは次のとおりです
Nick Craver

74

あなたは必要です

var i = $("#panel input"); 

または、正確に何をしたいかに応じて(以下を参照)

var i = $("#panel :input"); 

>は子供に限定され、すべての子孫が必要です。

編集:ニックが指摘したように、との間には微妙な違いが$("#panel input")あります$("#panel :input)ます。

最初のものは、タイプinputの要素のみを取得します。つまり、および要素は取得し<input type="...">ません。ニックに感謝します。自分でこれを知らなかったので、それに応じて私の投稿を修正しました。OPはどちらも認識しておらず、技術的には入力を要求したので、両方のオプションを残しました... :-)<textarea><button><select>


それで、:inputはすべてのinput / select / textareaフィールドを選択しますか?一斉に?
ユーリ

本質的に、はい。セレクターは一致の配列を返すので、「一度に」それを行うと言うことができると思いますが、それが何を意味するのかは完全には
わかり

1
つまり、そのセレクターだけで「すべてまとめて」。":input selector Description:すべての入力、テキストエリア、選択、ボタン要素を選択します。" それについては知りませんでした。これから使用します:)
Yuri

50

「find」メソッドを使用すると、すでにキャッシュされているコンテナのすべての子入力を取得して、再検索することができます(「children」メソッドは直接の子のみを取得します)。例えば

var panel= $("#panel");
var inputs = panel.find("input");

5
これは私にとって完璧でした-私は.each()を使用して要素をループしています。つまり、ループ内で$(this)を使用して現在の要素にアクセスしています。その結果、私は他の方法で答えで提案されていることの多くを実行することができません。-代わりに$(this).find( "input");を実行できます。ありがとう。
djbp 2013年

29

Ruby on RailsやSpring MVCなどのフレームワークを使用している場合は、角かっこやその他の文字を含むdivを使用する必要がある場合がありますがdocument.getElementById、これは使用できません。このソリューションは、同じタイプの複数の入力がある場合でも機能します。

var div = document.getElementById(divID);
$(div).find('input:text, input:password, input:file, select, textarea')
        .each(function() {
            $(this).val('');
        });
$(div).find('input:radio, input:checkbox').each(function() {
    $(this).removeAttr('checked');
    $(this).removeAttr('selected');
});

この例は、入力をクリアする方法を示しています。たとえば、変更する必要がある場合などです。


9
var i = $("#panel input");

動作するはずです:-)

>は直接の子のみをフェッチし、子の子はフェッチしません
は。:は疑似クラスを使用するためのものです。:ホバーなど

ここで疑似クラスの利用可能なcss-selectorsについて読むことができます:http//docs.jquery.com/DOM/Traversing/Selectors#CSS_Selectors


6
@henchman- :inputセレクターでもあります。api.jquery.com/ category / selectors / form- selectors <textarea>またはボタンinputがあったとしても、見つけられなかった:inputので、違いがあります。
Nick Craver

+1なので、>を省略するとうまくいきます。今私はまた、私が推奨するページでそれを見つけました...
フィル・リコフ

9

これが私のアプローチです:

他のイベントにもご利用いただけます。

var id;
$("#panel :input").each(function(e){	
  id = this.id;
  // show id 
  console.log("#"+id);
  // show input value 
  console.log(this.value);
  // disable input if you want
  //$("#"+id).prop('disabled', true);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="panel">
  <table>
    <tr>
       <td><input id="Search_NazovProjektu" type="text" value="Naz Val" /></td>
    </tr>
    <tr>
       <td><input id="Search_Popis" type="text" value="Po Val" /></td>
    </tr>
  </table>
</div>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.