2011-02-10 8 views
6

Bir AJAX aramasından sonra arka uçtan dönen bir nesneye dayalı bir li oluştururken bazı javascript var. Kullanıcı cihazları aramaya devam edebilir ve seçildiğinde geçerli sayfaya eklenir (li olarak). Yeni bir li her oluşturulduğunda, daha önce seçilmiş olan nesnelerin kimliklerini göndermek istiyorum.Django arka ucunda işlemek için nesne kimlikleri jQuery ile bir dizi oluşturma

lı oluşturulduğunda, kimlikleri "device - ###" olarak adlandırılır, burada ### veritabanındaki aygıtın kimliği olur, bu yüzden bu bölümü çıkarmam gerekir.

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

Ben de o olmayan jQuery yolu denedim:

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

Ve aşağıdaki hatayı alıyorum

 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++; 
     }; 

: Burada

bana sorun veriyor javascript var Bu hatayla sona erer:

Uncaught TypeError: Cannot read property 'id' of undefined 

alert(children[i].id.substr(4));'u attığımda Beklediğim sayıyla ilgili bir uyarı alıyorum. İstediğin düşünüyorum

+2

jQuery sürümünüzün çalışmadığı nedeni, "çocuklar [i]" bir jQuery nesnesine sarılmış öğeyi değil * gerçek elemanı * döndürdüğünden kaynaklanır. Çözüm, $ (çocuklar [i]) olacaktır. #Daha fazla bilirsen – sdleihssirhc

cevap

3

,

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

aksi geçen yineleme dizideki son öğe ötesinde olacak. Sorunun $.map()

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

Part kullanarak bunu yapmanın

Daha özlü yolu döngü <= yerine < kullandığı muhtemelen. Sıfır tabanlı bir dizin kullanan listedeki son öğenin length - 1 olduğunu unutmayın.

Kimliklerin bir Dizisini oluşturmak için, bunun yerine map()(docs) yöntemini kullanabilirsiniz.

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

.map() yöntem işlevinde geri değerleri ile bir jQuery nesnesi (Dizi benzeri bir nesne olan) doldurur.

Ardından, get()(docs) yöntemi, jQuery nesnesi yerine bu değerlerin bir Dizisini verir.

Aynı şeyi yapan toArray()(docs) yöntemini de kullanabilirsiniz.

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