2017-12-19 14 views
1

私は以下のスニペットを使用していますが、何らかの条件でオブジェクトを返す必要がありますが、このエラーはUncaught TypeError: Cannot read property 'obj1' of undefinedです。しかし、コンソールを使用してliオブジェクトにこのデータattrが表示されます。jQuery filter by dataプロパティ

for(var i = 0; i < 15; i++){ 
 

 
    li = $('<li>List</li>'); 
 
    $(li).data('test', {obj1: (i < 10 ? 'some' : 'any')}); 
 
    $(li).appendTo('#list'); 
 
} 
 

 
var f = $('#list li').filter(() => { 
 
    return $(this).data('test').obj1 == 'any' 
 
}); 
 

 
console.log($(f));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul id ="list"> 
 

 
</ul>

答えて

2

親指の基本的なルールは、UI関連の低いものを取り扱う場合、矢印機能を使用しないことです。同様に、イベントハンドラなどとして使用できます。矢印関数は、その実行コンテキストを自身にバインドするためです。そして、それはどんな手段でも上書きすることはできません。

var f = $('#list li').filter(function() { 
    return $(this).data('test').obj1 == 'any' 
}); 

矢印機能の代わりに通常の無名関数を使用します。それでも矢印関数を使用する場合は、thisがその実行コンテキストを指します。これは、SOの実行者のオブジェクトwindowを指します。