Javascript 使用Jquery获取rel属性

Javascript 使用Jquery获取rel属性,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个带有不同rel值的复选框列表。我下面的jquery代码给出了我的未定义 var checked_keys=[]; $("input[type='checkbox']:checked").each(function(index, value){ checked_keys.push( value.attr('rel') ); }); 但是,如果我使用“this”,它会起作用 var checked_keys=[]; $("input[type='checkbox']:checked

我有一个带有不同rel值的复选框列表。我下面的jquery代码给出了我的未定义

var checked_keys=[];
$("input[type='checkbox']:checked").each(function(index, value){
    checked_keys.push( value.attr('rel') );
});
但是,如果我使用“this”,它会起作用

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

有人能解释一下。每个值为的方法和每个值为$(this)的方法之间的区别吗?

在jQuery中,
$。每个方法都有一个回调,返回索引和DOM节点,后者是本机DOM节点,而不是用jQuery包装的,因此,需要对它进行包装,才能使用jQuery方法,如
attr()
,否则必须使用本机方法,如
getAttribute('rel')

作为旁注,还有一个似乎更合适的
$.map
方法

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

如果记录jQuery对象,可以看到所有选定元素都以数组样式以数字形式列出

var domElement = jqueryObject[0];//returns the first element of the jquerycollection
使用.each函数时,它将传递本机domeElement作为值参数,而不是该元素的jQuery对象。 这意味着您必须像这样用jquery包装domeElement

$(domElement).attr('rel');
var checked_keys=[];
$("input[type='checkbox']:checked").each(function(index, vale){
    checked_keys.push( $(value).attr('rel') );
});
这使您的代码看起来像这样

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

您是否尝试了
$(value)
而不是
value
?可能是返回javascript元素中的值,而不是jQuery元素。由于
$(“输入[type='checkbox']:选中”)[0]
将返回一个javascript元素。
引用普通DOM元素对象,而不是Jquery对象<代码>$(值)==$(此)
值===此
。如果简单操作是您的目标,那么重新创建jQuery对象的成本可能会很高,您还可以使用
value.getAttribute(“rel”)