Этим я отсортировал только текст, но ссылки остались на прежних местах. Как сделать чтобы текст ссылки соответствовал адресу ссылки после сортировки?
var x = $('ul li').length;
var mas = [];
var mas2 = [];
$('ul li').each(function( index ) {
mas[index] = $(this).text();
mas2[index] = $(this).find('a').attr('href');
});
mas.sort();
$( 'ul li' ).each(function( index ) {
$(this).find('a').text( mas[index]);
$(this).find('a').attr( 'href', mas2[index] );
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li><a href="h1">7</a></li>
<li><a href="h2">6</a></li>
<li><a href="h3">5</a></li>
<li><a href="h4">4</a></li>
<li><a href="h5">3</a></li>
<li><a href="h6">2</a></li>
<li><a href="h7">1</a></li>
</ul>
У метода сортировки есть параметр — функция сравнения, возвращающая строку, по которой алгоритм будет сравнивать элементы массива. В этом массиве содержатся потомки выбранного <ul> — теги <li>. Вставка отсортированной последовательности обратно на страничку производится присвоением свойству innerHTML разметки, составляющей наши отсортированные элементы. Это, кажется, самый простой способ замены содержимого какого-либо тега.
Код оказалось проще написать без применения jQuery, поэтому без неё.
var container = document.getElementById('cont');
var elements = [].slice.call(container.children);
elements.sort(el => el.textContent);
container.innerHTML = elements.map(el => el.outerHTML).join("");
<ul id="cont">
<li><a href="h1">7</a></li>
<li><a href="h2">6</a></li>
<li><a href="h3">5</a></li>
<li><a href="h4">4</a></li>
<li><a href="h5">3</a></li>
<li><a href="h6">2</a></li>
<li><a href="h7">1</a></li>
</ul>
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости