2016-02-23 16 views
5

ile rel özniteliğini al Farklı rel değerlerine sahip bir onay kutularının listesi var. Aşağıdaki jQuery kodum undefined veriyor.Jquery .each

var checked_keys=[]; 
$("input[type='checkbox']:checked").each(function(index, value){ 
    checked_keys.push(value.attr('rel')); 
}); 

Ancak, "bunu" kullanırsam, çalışır.

var checked_keys=[]; 
$("input[type='checkbox']:checked").each(function(){ 
    checked_keys.push($(this).attr('rel')); 
}); 

birisi değeri ve $ (this) ile .each ile .each arasındaki fark nedir açıklayabilir misiniz?

+1

'value' yerine' $ (value) 'ı denediniz mi? JQuery öğesinin değil javascript öğesinin döndürülmesinde değer olabilir. $ ("Input [type = 'checkbox']]: işaretli") olduğundan, ") [0]' javascript öğesini döndürecektir. – Kishor

+1

'value' ve' this', düz DOM öğesi Object, Jquery Object değil. $ (değer) === $ (this) 've' value === bu'. Basit işlemler sizin hedefiniz ise jQuery nesnesini yeniden oluşturmak pahalı olabilir, ayrıca 'value.getAttribute (" rel ")' – Aukhan

cevap

2

JQuery, $.each yöntem endeksi ve DOM düğümü geri bir geri sahiptir ve ikinci değil jQuery sarılmış doğal DOM düğümü, bu nedenle attr() gibi jQuery yöntemleri ile çalışmak üzere sarılmış gereken, Eğer bir jQuery nesnesi giriş yaparsanız, aksi takdirde bir $.map yöntem de var, bir not olarak getAttribute('rel')

var checked_keys=[]; 
$("input[type='checkbox']:checked").each(function(index, value){ 
    checked_keys.push($(value).attr('rel')); 
}); 

gibi yerli yöntemleri kullanmak gerekir ki gi,

var checked_keys = $("input[type='checkbox']:checked").map(function(index, value){ 
    return $(value).attr('rel'); 
}); 
+1

ile harita işlevine verilebilecek daha iyi bir çözüm olabilir. – sniels

2

daha uygun görünüyor Seçilen tüm öğelerin, Dizi tarzı bir tarzda sayısal olarak listelendiğini görmek.

var domElement = jqueryObject[0];//returns the first element of the jquerycollection 

Eğer .each işlevini kullanın, bu doğal değeri parametre olarak DOMElement, ve bu elemanın bir jQuery nesnesi geçirecektir. Bu, domElement'i bu şekilde jquery ile sarmanız gerektiği anlamına gelir.

$(domElement).attr('rel'); 

Bu, kodunuzun bu şekilde görünmesini sağlar.

var checked_keys=[]; 
$("input[type='checkbox']:checked").each(function(index, vale){ 
    checked_keys.push($(value).attr('rel')); 
}); 
İlgili konular