我有一个包含不同rel值的复选框列表。我的以下jquery代码给出了我的undefined。
.Dispose()
但是,如果我使用"这个",它可以工作。
var checked_keys=[];
$("input[type='checkbox']:checked").each(function(index, value){
checked_keys.push( value.attr('rel') );
});
有人可以解释.each与值和.each与 $(this)之间的区别是什么?
答案 0 :(得分:2)
在jQuery中,$.each
方法有一个返回索引和DOM节点的回调,而后者是本机DOM节点,没有包装在jQuery中,所以需要将它包装起来以使用jQuery方法与attr()
类似,否则您必须使用getAttribute('rel')
var checked_keys=[];
$("input[type='checkbox']:checked").each(function(index, value){
checked_keys.push( $(value).attr('rel') );
});
作为旁注,还有$.map
方法,似乎更合适
var checked_keys = $("input[type='checkbox']:checked").map(function(index, value){
return $(value).attr('rel');
});
答案 1 :(得分:2)
如果您记录一个jQuery对象,您可以看到所有选定的元素都以数组样式的方式以数字形式列出。
var domElement = jqueryObject[0];//returns the first element of the jquerycollection
当您使用 .each 函数时,它将传递本机domElement作为value参数,而不是该元素的jQuery对象。 这意味着你必须用这样的jquery包装domElement。
$(domElement).attr('rel');
这使您的代码看起来像这样。
var checked_keys=[];
$("input[type='checkbox']:checked").each(function(index, vale){
checked_keys.push( $(value).attr('rel') );
});