0

假设我有一个包含多个输入的表单,我使用一个非常标准的 jQuery 语句来获取所有输入:

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

现在,我想对这些输入采取行动,但假设我想将单选按钮和/或复选框组视为一个单一的东西。如何拆分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 回答