Задать вопрос

Как отсортировать массив DOM-элементов в зависимости от значений атрибута вложенных элементов?

У меня есть массив DOM-элементов. В каждом есть 'a href="...value=42"'. Числа после = разные, в разном порядке, могут и не быть. Подскажите как лучше отсортировать массив по числу после =, где value=1, должен быть на первом месте, value=2 - на втором и т.п. Если после value=2 идёт сразу value=10, то этот элемент помещается на третье место. Если value=num нет, то этот элемент помещается в конец массива.
Элементы типа

<div>
    <a href="some_string...value=10">link</a>
</div>
  • Вопрос задан
  • 231 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const sorted = arr
  .map(n => [
    n,
    +new URLSearchParams(n.querySelector('a').href.split('?').pop()).get('value') || Infinity,
  ])
  .sort((a, b) => a[1] - b[1])
  .map(n => n[0]);

UPD. А точно массив? Если всё-таки сортировать надо элементы внутри их родителя, то

parentEl.append(...Array
  .from(parentEl.querySelectorAll('a'), n => [
    n.parentNode,
    Number(n.getAttribute('href').match(/(?<=value=)\d+/)) || Infinity,
  ])
  .sort((a, b) => a[1] - b[1])
  .map(n => n[0])
);
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
Как я понял, сортировать не по отдельному атрибуту, а по числу в конце длинного значения href.

..про Infinity списал у 0xD34F
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы