0

いくつかの入力を含むフォームがあり、かなり標準的な jQuery ステートメントを使用してそれらすべてを取得するとします。

var inputs = $("#some-form").find("input")

さて、これらの入力に基づいて行動したいと思いますが、ラジオ ボタンやチェックボックスのグループを 1 つのものとして扱いたいとしましょう。inputs属性でグループ化された要素に分割するにはどうすればよいですかname。処理が開始されたときに名前がどうなるかわからないことに注意してください。

人間的に言えば、次のようなロジックを実行する必要があります。

入力のリストを反復処理します。入力ごとに、プレースホルダー配列に既に追加されているかどうかを確認します。もしそうなら、放っておいてください。そうでない場合は、それとその名前を持つすべてのものを上記のプレースホルダー配列に (サブ配列として) 追加します。

本質的に、私は次のようなものが欲しいです:

[[<input type="text" name="name1">], [<input type="radio" name="name2">,<input type="radio" name="name2">]]
4

2 に答える 2

2

フィルター内で属性セレクターを使用してみてください。

var $formInput = $('#some-form').find('input');
var inputText = $formInput.filter('[type=text]')
var otherInput = $formInput.filter("[type=radio]")
                          .add($formInput.filter('[type=checkbox]'));

またはさらに良い

var otherInput = $formInput.filter(function () {
                     return this.type == 'radio' || this.type == 'checkbox';
                  });

デモ: http://jsfiddle.net/utwaf/

名前など、属性でグループ化された要素に入力を分割するにはどうすればよいですか

var elements = []; //elements by name
var $formInput = $('#some-form').find('input');
elements.push($formInput.filter(function() { 
   return this.name == 'name1';
});
elements.push($formInput.filter(function() { 
   return this.name == 'name2';
});

注:配列にプッシュされるすべての要素は jQuery オブジェクトです。

于 2013-02-06T19:27:42.357 に答える
1
function getInputsPartitioned(formEl) {
    var inputEls = formEl.querySelectorAll("input");

    var inputsByName = Object.create(null);
    for (var i = 0; i < inputEls.length; ++i) {
        var inputEl = inputEls[i];
        var name = inputEl.name;

        if (!(name in inputsByName)) {
            inputsByName[name] = [];
        }
        inputsByName[name].push(inputEl);
    }

    // `inputsByName` now looks like this:
    // {
    //     name1: [<input type="text" name="name1">],
    //     name2: [<input type="radio" name="name2">, <input type="radio" name="name2">]
    // }

    // To get it into arrays:

    return Object.keys(inputsByName).map(function (name) {
        return inputsByName[name];
    });
}

おまけ: jQuery は必要ありません。

于 2013-02-06T21:35:35.687 に答える