Jak uzyskać wszystkie podrzędne dane wejściowe elementu 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>

Muszę wybrać wszystkie dane wejściowe w określonym div.

To nie działa:

var i = $("#panel > :input");
user137348
źródło

Odpowiedzi:

301

Użyj go bez większego niż:

$("#panel :input");

Te >środki tylko bezpośrednie dzieci elementu, jeśli chcesz, aby wszystkie dzieci bez względu na głębokość prostu używać spacji.

Nick Craver
źródło
3
Interesujące ... Teraz jestem zdezorientowany ... To :jest dla pseudoklas, prawda? Ale chcemy wybrać typ elementu. Dlaczego :?
mnemosyn
11
@mnemosyn - jest to inny typ selektora, taki jak `: checkbox ', szczegóły znajdziesz tutaj: api.jquery.com/input-selector A oto bardziej kompletna lista: api.jquery.com/category/selectors/form -selektory
Nick Craver
74

Potrzebujesz

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

lub , w zależności od tego, czego dokładnie chcesz (patrz poniżej)

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

>będą ograniczać się do dzieci, chcesz wszystkich potomków.

EDYCJA: Jak zauważył Nick, istnieje subtelna różnica między $("#panel input")a $("#panel :input).

Pierwsza z nich pobierze tylko elementy typu input, to znaczy <input type="...">, ale nie <textarea>, <button>i <select>elementy. Dzięki Nick, sam o tym nie wiedziałem i odpowiednio poprawiłem mój post. Zostawił obie opcje, ponieważ wydaje mi się, że OP również nie był tego świadomy i - technicznie - poprosił o dane wejściowe ... :-)

mnemosyn
źródło
A więc: input wybierze wszystkie pola input / select / textarea? Wszystko na raz?
Yuri
Zasadniczo tak. Selektor zwraca tablicę dopasowań, więc myślę, że można powiedzieć, że robi to
`
1
To znaczy „wszyscy razem” tylko z tym selektorem. ": selektor wejścia Opis: Wybiera wszystkie wejścia, pola tekstowe, elementy wyboru i przyciski." Nie wiedziałem o tym, będę go używać od teraz :)
Yuri
50

Metoda „find” może zostać użyta do pobrania wszystkich danych wejściowych podrzędnych kontenera, który został już zapisany w pamięci podręcznej, aby zapisać go przy ponownym wyszukiwaniu (podczas gdy metoda „dzieci” pobierze tylko bezpośrednie elementy podrzędne). na przykład

var panel= $("#panel");
var inputs = panel.find("input");
Rob Willis
źródło
5
To było dla mnie idealne - zapętlam elementy za pomocą .each (), co oznacza, że ​​w pętli uzyskuję dostęp do bieżącego elementu za pomocą $ (this). W rezultacie nie jestem w stanie wykonać wielu z tego, co sugerują odpowiedzi. - Zamiast tego jestem w stanie zrobić $ (this) .find ("wejście"); Dzięki.
djbp
29

Jeśli używasz frameworka takiego jak Ruby on Rails lub Spring MVC, może być konieczne użycie elementów div z nawiasami kwadratowymi lub innymi znakami, których nie możesz używać, document.getElementByIda to rozwiązanie nadal działa, jeśli masz wiele wejść tego samego typu.

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');
});

Ten przykład pokazuje, jak wyczyścić dane wejściowe, na przykład musisz to zmienić.

Paulo Fidalgo
źródło
9
var i = $("#panel input");

powinno działać :-)

> będzie pobierać tylko bezpośrednie dzieci, żadnych dzieci dzieci
: służy do używania pseudoklas, np. : hover itp.

o dostępnych selektorach css pseudoklas można przeczytać tutaj: http://docs.jquery.com/DOM/Traversing/Selectors#CSS_Selectors

Phil Rykoff
źródło
6
@henchman - też :inputjest selektorem, api.jquery.com/category/selectors/form-selectors Gdyby miał <textarea>przycisk lub, to inputby go nie znalazł :input, więc jest różnica.
Nick Craver
+1, więc opuszczenie> załatwi sprawę. teraz znalazłem to również na stronie, którą poleciłem ...
Phil Rykoff
9

oto moje podejście:

Możesz go użyć w innym przypadku.

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>

Uttam Kumar Roy
źródło