// Этот код работает
let elements = $('.item');
console.log(elements);
let newElements = elements.filter(function() {
return $(this).attr('class') === 'item third';
});
console.log(newElements);
// Этот код не работает
let elements = $('.item');
console.log(elements);
let newElements = elements.filter(function(item) {
return item.attr('class') === 'item third';
});
console.log(newElements);
<ul class="list">
<li class="item">1</li>
<li class="item">2</li>
<li class="item third">3</li>
<li class="item">4</li>
<li class="item">5</li>
</ul>
Почему при обращении к массиву элементов с помощью динамически созданной переменной "item" внутри метода "filter", не работает метод "attr" для этой переменной "item"?
Исходя из документации return item.attr('class') === 'item third'; не работает из за того что первый аргумент callback item является индексом, а не элементом.
Вам нужно или так:
var elements = jQuery(".item"),
newElements = elements.filter(function(index, element) {
return element.className == "item third";
});
console.log(newElements);
Или так что ещё лучше:
var elements = jQuery(".item"),
newElements = elements.filter(".third");
console.log(newElements);
A так как this у callback является текущим элементом в итерации (или рекурсии), сравнение $(this).attr('class') === 'item third'; и работает.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей