Фильтр jQuery по свойству данных

У меня есть следующий фрагмент, который должен возвращать объекты по некоторым условиям, но я получил эту ошибку: Uncaught TypeError: Cannot read property 'obj1' of undefined, Тем не менее, я вижу эти данные в li объект с помощью консоли.

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>

1 ответ

Решение

Основное правило - не использовать функцию стрелки при обработке материалов, связанных с пользовательским интерфейсом. Например, как обработчик событий и т. Д. Потому что функция стрелки будет привязывать свой контекст выполнения к себе. И это не может быть отменено никакими средствами.

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

Используйте обычную анонимную функцию вместо функции стрелки. Если вы все еще хотите использовать функцию стрелки, то this будет указывать на его контекст выполнения. Было бы указать на window объект в исполнителе СО.

Другие вопросы по тегам