jQuery - получить элементы формы по идентификатору контейнера

Это самый простой способ получить все элементы формы, содержащиеся в элементе-оболочке.

<form name="myForm">
  <input name="elementA" />
  <div id="wrapper">
    <input name="elementB" />
    <textarea name="elementC" />
  </div>
</form>

В приведенном выше HTML я бы использовал elementB и elementC, но не elementA. Я не хочу перечислять все типы элементов формы (select, textarea, input, option...). Я бы предпочел использовать myForm.elements.

Любые идеи?


person Davide Ungari    schedule 24.05.2010    source источник


Ответы (4)


Используйте псевдоселектор :input, если вы не хотите указывать их все:

$('#wrapper :input');

:input выбирает все элементы input, textarea, select и button. И здесь нет необходимости использовать .children().

person Tatu Ulmanen    schedule 24.05.2010
comment
Мне действительно нужно взглянуть на больше псевдоселекторов. Это дважды кто-то придумал лучшее решение, потому что я не знаю их всех :) - person Kerry Jones; 24.05.2010
comment
Да, это так :), не знаю, почему я поверил, что это только для элементов ввода... типа :reset :radio... - person Davide Ungari; 24.05.2010
comment
@ungarida: Потому что input и :input отличаются только одним символом, но последний включает все типы управления формой. - person Powerlord; 24.05.2010
comment
Отличный ответ, подробнее о селекторе :input здесь jQuery api :input - person chim; 02.02.2012
comment
Это также работает, чтобы найти элементы формы в нескольких слоях внутри оболочки... $('#wrapper').find(':input'); Это будет искать входные данные внутри дочерних элементов или оболочек внутри оболочки. - person raphie; 11.03.2013

Если в нем нет ничего, кроме элементов формы

$('#wrapper').children();

Если будут и другие вещи

$('#wrapper').children( 'input, select, textarea' );
person Kerry Jones    schedule 24.05.2010
comment
как насчет <input name="elementA" />, который не будет найден - person jigfox; 24.05.2010
comment
Он говорит, что я бы выбрал elementB и elementc, но не elementA. Вначале он запросил элементы формы внутри контейнера. - person Kerry Jones; 24.05.2010
comment
Да, это второй случай. Но я бы предпочел не делать список «ввод, выбор, текстовое поле», потому что я беспокоюсь о том, чтобы не учитывать какой-либо тип элемента формы. Есть ли способ вместо этого использовать массив form.elements? - person Davide Ungari; 24.05.2010
comment
вы правы, извините, я пропустил это @ungarida: нет, без плагина проще не бывает - person jigfox; 24.05.2010

jQuery('form[name=myform] div#wrapper').children();

person sushil bharwani    schedule 24.05.2010
comment
Вы также хотите найти elementA. Попробуйте код здесь, это не должно быть - person sushil bharwani; 24.05.2010

Как насчет

$(form)[0].elements

Я знаю, что приведенный выше код работает в Chrome. Не тестировать другие браузеры.

person aztack    schedule 07.04.2013