Як отримати всі дочірні введення елемента 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>

Мені потрібно вибрати всі входи в конкретному розділі.

Це не працює:

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

Відповіді:


301

Використовуйте його не більше ніж:

$("#panel :input");

В >означає тільки прямі діти елемента, якщо ви не хочете , щоб всі діти незалежно від глибини просто використовувати простір.


3
Цікаво ... Зараз я розгублений ... Це :для псевдокласів, чи не так? Але ми хочемо вибрати тип елемента. Чому :?
мнемосин

11
@mnemosyn - це ще один тип селектора, наприклад `: прапорець ', див. тут детальніше: api.jquery.com/input-selector А ось більш повний перелік таких: api.jquery.com/category/selectors/form -селекціонери
Нік Крейвер

74

Тобі потрібно

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

або , залежно від того, що саме ви хочете (див. нижче)

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

>обмежуватиме дитина, ви хочете , щоб все нащадок.

EDIT: Як Нік зазначив, що є тонка різниця між $("#panel input")і $("#panel :input).

Перший отримає лише елементи типу введення, тобто <input type="...">, але не <textarea>, <button>та <select>елементи. Дякую Ніку, я сам цього не знав і відповідно виправив свою посаду. Залишив обидва варіанти, тому що я думаю, що ОП про це не знав і - технічно - попросив ввести ... :-)


Отже,: введення вибере всі поля введення / вибору / textarea? Все одразу?
Юрій

По суті, так. Селектор повертає масив збігів, тож я думаю, ви могли б сказати, що це робить "відразу", хоча я не зовсім впевнений, що ви маєте на увазі під цим ...
mnemosyn

1
Я маю на увазі "всі разом" з саме тим селектором. ": селектор введення Опис: Вибирає всі елементи введення, текстові області, елементи вибору та кнопки." Не знав про це, я буду використовувати його відтепер :)
Юрій

50

Метод "знайти" може бути використаний для отримання всіх дочірніх даних про контейнер, який уже був кешований, щоб заощадити його знову (тоді як метод "діти" отримає лише безпосередніх дітей). напр

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

5
Це було ідеально для мене - я перебираю елементи за допомогою .each (), що означає, що в циклі я отримую доступ до поточного елемента за допомогою $ (this). Як результат, я не в змозі виконати багато того, що інакше пропонується у відповідях. - Натомість я в змозі зробити $ (this) .find ("input"); Дякую.
djbp

29

Якщо ви використовуєте таку рамку, як Ruby on Rails або Spring MVC, вам може знадобитися використовувати divs з квадратними дужками або іншими символами, які заборонено використовувати, 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-селектори псевдокласів тут: http://docs.jquery.com/DOM/Traversing/Selectors#CSS_Selectors


6
@henchman - :inputце також селектор, api.jquery.com/category/selectors/form-selectors Якби у нього була <textarea>кнопка чи кнопка, inputїї не знайшли :input, значить, є різниця.
Нік Крейвер

+1, тож відмовившись> зробить трюк. тепер я також знайшов це на сторінці, яку я рекомендував ....
Phil Rykoff

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>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.