Ссылки не изменились после сортировки по алфавиту

У меня есть список, отсортированный по алфавиту, но ссылки из каждого li не меняются, если я проверяю ссылки элементов после сортировки. Не могу понять, что мне не хватает.

Любая помощь с объяснениями будет принята с благодарностью.

Мой код в HTML:

<ul class = "row list-unstyled" id = "testingList">
  <li class = "col-sm-6 col-lg-4 col-xl-3 mb-3 top-box"><a class = "top-box__content" href = "https://www.example.com/info/1" target = "_blank">
      <div class = "row no-gutters">
        <div class = "col">
          <h3 class = "top-box__title">Pink</h3>
        </div>
      </div>
    </a>
  </li>
  <li class = "col-sm-6 col-lg-4 col-xl-3 mb-3 top-box"><a class = "top-box__content" href = "https://www.example.com/info/2" target = "_blank">
      <div class = "row no-gutters">
        <div class = "col">
          <h3 class = "top-box__title">White</h3>
        </div>
      </div>
    </a>
  </li>
  <li class = "col-sm-6 col-lg-4 col-xl-3 mb-3 top-box"><a class = "top-box__content" href = "https://www.example.com/info/3" target = "_blank">
      <div class = "row no-gutters">
        <div class = "col">
          <h3 class = "top-box__title">Brown</h3>
        </div>
      </div>
    </a>
  </li>
</ul>

Мой JS-код:

let pickList = document.querySelector("#testingList");

let li = pickList.querySelectorAll("a");

resultList = [];

for (let i = 0; i < li.length; i++) {
  resultList.push(li[i].innerHTML);
  console.info(resultList);
}

resultList.sort();

for (let j = 0; j < li.length; j++) {
  li[j].innerHTML = resultList[j];
}

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы переписываете innerHTML элементов <a>, но не меняете их атрибуты .href. Возможно, было бы проще просто переместить элементы, а не перестраивать их.

let pickList = document.querySelector("#testingList");

let lis = [...pickList.querySelectorAll("li")];

lis.sort((a, b) => {
  // sort on the text of the h3 elements contained within
  const asort = a.querySelector('h3.top-box__title').innerText;
  const bsort = b.querySelector('h3.top-box__title').innerText;
  return asort.localeCompare(bsort);
});

// append each li to the list in order
lis.forEach(li => pickList.appendChild(li));
<ul class = "row list-unstyled" id = "testingList">
  <li class = "col-sm-6 col-lg-4 col-xl-3 mb-3 top-box"><a class = "top-box__content" href = "https://www.example.com/info/1" target = "_blank">
      <div class = "row no-gutters">
        <div class = "col">
          <h3 class = "top-box__title">Pink</h3>
        </div>
      </div>
    </a>
  </li>
  <li class = "col-sm-6 col-lg-4 col-xl-3 mb-3 top-box"><a class = "top-box__content" href = "https://www.example.com/info/2" target = "_blank">
      <div class = "row no-gutters">
        <div class = "col">
          <h3 class = "top-box__title">White</h3>
        </div>
      </div>
    </a>
  </li>
  <li class = "col-sm-6 col-lg-4 col-xl-3 mb-3 top-box"><a class = "top-box__content" href = "https://www.example.com/info/3" target = "_blank">
      <div class = "row no-gutters">
        <div class = "col">
          <h3 class = "top-box__title">Brown</h3>
        </div>
      </div>
    </a>
  </li>
</ul>

Большое спасибо за элегантное и современное JS-решение! Очень хорошо объяснил!

MeAndMe 29.03.2022 17:50

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