49

フォームのすべての子要素をループする最良の方法は何でしょうか?私のフォームには、入力要素と選択要素の両方が含まれています。

現時点で私は持っています:

success: function(data) {
                $.each(data.details, function(datakey, datavalue) {
                    $('#new_user_form > input').each(function(key, value) {
                        if($(this).attr('id') == datakey) {
                            $(this).val(datavalue);
                        }
                    });
                });
            }

ただし、これはフォームの入力要素をループするだけであり、select要素も含めたいと思います。

私が試してみました:

$('#new_user_form > input, #new_user_form > select').each(function(key, value) {

しかし、これは機能しません。なぜこれが起こるのか誰かが知っていますか?ありがとう!

4

9 に答える 9

84

jQuery :input セレクター ページから:

:input は jQuery 拡張機能であり、CSS 仕様の一部ではないため、:input を使用するクエリは、ネイティブ DOM の querySelectorAll() メソッドによって提供されるパフォーマンス向上を利用できません。:input を使用して要素を選択するときに最高のパフォーマンスを実現するには、最初に純粋な CSS セレクターを使用して要素を選択し、次に .filter(":input") を使用します。

これが最良の選択です。

$('#new_user_form *').filter(':input').each(function(){
    //your code here
});
于 2013-01-02T10:44:32.307 に答える
27

純粋な JavaScript はそれほど難しくありません。

for(var i=0; i < form.elements.length; i++){
    var e = form.elements[i];
    console.log(e.name+"="+e.value);
}

注: form.elements はオブジェクトの for-in ループであるため、期待どおりに動作しません。

回答はこちら (Chris Pietschmann による)にあり、ドキュメントはこちら (W3S)にあります。

于 2013-08-16T09:48:41.133 に答える
19
$('#new_user_form').find('input').each(function(){
   //your code here
});
于 2013-01-02T10:57:34.743 に答える
8

私は使用しています:

$($('form').prop('elements')).each(function(){
    console.info(this)
});

醜いように見えますが、私にとっては、すべての要素を で取得するためのより良い方法jQueryです。

于 2015-08-12T09:06:52.650 に答える
3

このようにするとどうなりますか:-

$('#new_user_form input, #new_user_form select').each(function(key, value) {

ライブデモを参照

于 2013-01-02T10:52:41.560 に答える
1

$('#new_user_form :input')あなたの進む道になるはずです。>セレクターの省略に注意してください。有効な HTML フォームでは、入力タグがフォーム タグの直接の子であることは許可されません。

于 2013-01-02T10:45:14.253 に答える