Jquery一次将多个选择器推入一个对象

时间:2014-07-06 06:07:15

标签: javascript jquery jquery-selectors

我正在尝试将名称和饮食字段一次性推送到单个对象中,以便它控制台.log出类似

的内容
group1: Array[some number]
    [0]: Object
        diet: "some diet"
        name: "some name"
    [1]: Object
        diet: "some other diet"
        name: "some other name"

group2: Array[some number]
    [0]: Object
        diet: "some diet"
        name: "some name"
    [1]: Object
        diet: "some other diet"
        name: "some other name"
    [2]: Object
        diet: "another diet"
        name: "another name"
    so on....

但是,我遇到一些逻辑错误导致console.log成为这样:

group1: Array[some number]
    [0]: Object
        diet: undefined
        name: "some name"
    [1]: Object
        diet: undefined
        name: "some other name"

group2: Array[some number]
    [0]: Object
        diet: undefined
        name: "some name"
    [1]: Object
        diet: undefined
        name: "some other name"
    [2]: Object
        diet: undefined
        name: "another name"
    so on....

我对jquery / javascript和php相比较新(3周所以不要刺伤我太多)和afaics似乎没有任何问题。我该如何解决这个问题?

这是我的代码:

var tso = {
            group1: [],
            group2: [],
            ogroup: [],
            igroup: [],
            others: []
        };

for (var k in tso) {
    if (tso.hasOwnProperty(k)) {
        var nameField = $("input[id*="+k+"]");
        var dietField = $("select[id*="+k+"] option:selected");
        $.each($(nameField, dietField), function() {
            tso[k].push({name: $(this).closest('input').val(), diet: $(this).closest('select').val()});
        });
    }
};

console.log(tso);

2 个答案:

答案 0 :(得分:1)

尝试执行for,如下所示:

for (var k in tso) {
    if (tso.hasOwnProperty(k)) {
        var nameField = $("input[id*="+k+"]").val();
        var dietField = $("select[id*="+k+"]").val();        
        tso[k].push({name: nameField, diet: dietField });
    }
}

答案 1 :(得分:0)

好吧,玩了更多,并找到了一种方法来做到这一点。因为我有相同数量的输入和选择元素,所以我可以迭代哪个元素首先出现。在我的例子中,输入总是在select元素之前,因此我可以使用.next()命令来获取下一个元素。

for (var k in tso) {
    if (tso.hasOwnProperty(k)) {
        $("input[id*="+k+"]").each(function() {
            tso[k].push({name: $(this).val(), diet: $(this).next().val()});
        });
    }
};

这个安慰

group1: Array[some number]
    [0]: Object
        diet: "American"
        name: "some name"
    [1]: Object
        diet: "Western"
        name: "some other name"

group2: Array[some number]
    [0]: Object
        diet: "Asian"
        name: "some name"
    [1]: Object
        diet: "No preference"
        name: "some other name"
    [2]: Object
        diet: "Vegetarian"
        name: "another name"
so on....

如果元素不是彼此相邻,您可以使用.nextUntil(" selector")来选择下一个输入/选择/元素