#javascript #jquery #filter #filtering
Вопрос:
Я хотел бы отфильтровать объекты с назначенным определенным классом. Мне нужно их положение в индексе. вот мой код js:
arr = $('table td').filter('.class', function() {
return $(this).index()
});
console.log(arr);
это возвращает все tds с .class
присвоенным классом. но я хотел бы знать их положение в индексе. как я могу этого достичь? Я также пытался выяснить это с помощью grep. там та же проблема.
Ответ №1:
Я думаю, что для этого можно было бы использовать общий метод итерации и передавать индекс в массив, когда такой элемент найден:
const arr = [];
$('table td').each(function(i) {
if (this.matches('.class')) {
arr.push(i);
}
});
Хотя нет необходимости в большой библиотеке, такой как jQuery, для чего-то такого тривиального:
const arr = [];
const tds = document.querySelectorAll('table td');
for (let i = 0; i < tds.length; i ) {
if (tds[i].matches('.class')) {
arr.push(i);
}
}
Ответ №2:
Используется map()
для возврата нового массива на основе значений, полученных из соответствующих элементов
const arr = $('table td.class').map((i, el) => $(el).index()).get()
console.log(arr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr>
<td class="class"></td>
<td></td>
<td></td>
<td class="class"></td>
<td></td>
</tr>
</table>