使用jQuery的对象ID创建一个数组,以便在Django后端上进行处理

时间:2011-02-10 22:34:50

标签: javascript jquery django arrays

我有一些javascript正在创建一个基于AJAX搜索后从后端返回的对象的li。用户可以继续搜索设备,并在选择时将它们添加到当前页面(作为li)。每次创建新的li时,我都想发送已经选择的对象的id。

当创建li时,它们的id被命名为“device - ###”,其中###是数据库中设备的ID,因此我需要删除该部分。

这是给我提问的javascript:

        var children = $('#temp_inventory').children();
        var count = children.length;
        var devices = [];
        var i = 0;
        while (i<=count){
            devices[i] = children[i].id.substr(4);
            i++;
        };

我收到以下错误:

Uncaught TypeError: Object #<HTMLLIElement> has no method 'attr'

我也尝试过非jQuery方式:

devices[i] = children[i].id.substr(4);

我最终得到了这个错误:

Uncaught TypeError: Cannot read property 'id' of undefined

当我投入alert(children[i].id.substr(4));时,我会收到一个警告,其中包含我期待的号码。

2 个答案:

答案 0 :(得分:4)

部分问题可能是您的循环使用<=而不是<。请记住,列表中使用从零开始的索引的最后一项是length - 1

要创建ID数组,您可以使用map()(docs)方法。

var devices = $('#temp_inventory').children().map(function() {
    return this.id.substr(4);
}).get();

.map()方法使用函数中返回的值填充jQuery对象(类似于数组的对象)。

然后get()(docs)方法为您提供了这些值的数组而不是jQuery对象。

你也可以使用toArray()(docs)方法做同样的事情。

var devices = $('#temp_inventory').children().map(function() {
    return this.id.substr(4);
}).toArray();

答案 1 :(得分:3)

我想你可能想要,

while (i<count){
  devices[i] = children[i].id.substr(4);
  i++;
};

否则最后一次迭代将超出数组中的最后一项。

使用$.map()

执行此操作的更简洁方法
var devices = $.map($('#temp_inventory').children(), function(elem) {
  return elem.id.substr(4);   
});