2016-02-23 10 views
5

私は異なるrel値を持つチェックボックスのリストを持っています。私の次のjqueryコードは私に未定義を与えています。Jquery .eachを使用してrel属性を取得

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')); 
}); 

誰かが$(この)と.eachと.eachの違いは何で説明できますか?

+1

あなたは 'value'ではなく' $(value) 'を試しましたか? jQuery要素ではなく、javascript要素を返すときの値になる可能性があります。 '$(" input [type = 'checkbox']:checked ")[0]'はjavascript要素を返します。 – Kishor

+1

'value'と' this'はプレーンなDOM要素のObjectであり、Jqueryオブジェクトではありません。 '$(値)=== $(これ)'と '値===これ 'です。 jQueryオブジェクトを再作成することは、単純な操作がターゲットであれば高価になる可能性があります。また、map関数のために 'value.getAttribute(" rel ")' – Aukhan

答えて

2

$.eachメソッドは、インデックスとDOMノードを返すコールバックを持ち、後者はjQueryでラップされていないネイティブDOMノードなので、attr()のようなjQueryメソッドで動作するようにラップする必要があります。あなたはjQueryオブジェクトをログに記録した場合はそうでなければ、$.map方法もあります、追記としてgetAttribute('rel')

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

のようなネイティブメソッドを使用する必要があるだろう、それはあなたがC、

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

Upvoteを使うこともできます。 – sniels

2

より適切と思われます選択されたすべての要素が配列スタイルの方法で数値的に列挙されていることを確認してください。

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

あなたは.each機能を使用する場合、それは本来の値パラメータとしてDOMELEMENTではなく、その要素のjQueryオブジェクトを渡します。 これは、このようにdomElementをjqueryでラップする必要があることを意味します。

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

これによりコードがこのようになります。

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