如何在数组中保存相同的对象类型

时间:2013-08-01 11:01:50

标签: javascript jquery arrays object

我想在Array()

中保存相同的对象类型

例如,当我想选择所有复选框并将值保存在数组中时:

selectAllCbs: function() {
            var self = this;
            $('#' + instanceName + 'table_form input[type=checkbox]').each(function(index,cb) {
                if($(cb).prop('disabled') == false) {
                    $(cb).prop('checked',true);
                    console.log("Select all clicked:" + cb); //gives me [object HTMLInputElement] result
                    selected.push(cb); //save to an array
                    self.changeRowStyle(cb);
                }
            });

当我在用户点击该行时使用几乎相同的代码时,我会得到不同的类型:

rowClicked: function(id) {
        var cb = $('#' + instanceName + 'cb_' + id);

        if($(cb).is(':checked')) {
            $(cb).prop('checked',false);
            selected.splice(selected.indexOf(this.value),1);
        } else {
            $(cb).prop('checked',true);
            console.log("Row clicked:" + cb); //gives me [object Object]
            selected.push(cb);
        }
        this.changeRowStyle(cb);
    },

所以主要的问题是如何在[object HTMLInputElement]类型中保存rowClicked元素?

因为在第一个示例中,我可以使用selected[i].value读取值,而第二个示例则需要使用selected[i][0].value读取值。

2 个答案:

答案 0 :(得分:1)

rowClicked中,替换:

selected.push(cb);

使用:

selected.push(cb[0]);

并在rowClicked方法{/ 1}}中执行相同操作

答案 1 :(得分:1)

可能让您感到困惑的是在稍后阶段比较您的数组元素。您无法比较两个JQuery对象,但可以比较两个DOM元素。

JQuery将所有内容包装成JQuery对象,以便通过所有性感功能对其进行超级充电。您在第一批代码中存储的是DOM元素,因为您没有在JQuery选择器方法中包装cb。在第二批代码中,您将存储一个JQuery选择器。

为了获取第二批代码的DOM元素,只需使用get函数末尾的rowClicked方法:

this.changeRowStyle(cb.get(0));

显然,将此函数的push参数更改为相同:

selected.push(cb.get(0));