Как отсортировать по id в дочернем элементе списка в jquery

Чрезвычайно новичок в коде и только действительно пробует основы.

Мне нужно упорядочить этот список по дате выпуска, выбрав класс (.date) дочернего элемента, а затем используя идентификатор для сортировки. имея в виду, что идентификатор li используется для сортировки по чему-то другому. Я просто не могу понять, как выбрать класс ребенка и отсортировать его по идентификатору.

Вот разметка:

<button id = "datereleased">Date Released</button>

<div id = "sortcontainer">

 <li id = "60">
  <h2>Some game</h2>
  <h2 class = "date" id = "2015">(2015)</h2>  
  <h3>45/100</h3>
  </li>

 <li id = "45">
  <h2>Some game</h2>
  <h2 class = "date" id = "2017">(2017)</h2>
  <h3>45/100</h3>
  </li>

 <li id = "80">
  <h2>Some game</h2>
  <h2 class = "date" id = "2013">(2013)</h2>
  <h3>45/100</h3>
  </li>
</div>

и что у меня есть до сих пор:

$(document).ready(function() {
    $( "#datereleased" ).click(function(){
        var lis = $('#sortcontainer').children('li').remove();    
        lis.sort(function(a, b) {
            return parseInt($('.date > id', a)) >  parseInt($('.date > id', b));
        }); 
        $('#sortcontainer').append(lis);
    });
});

Заранее спасибо, если у кого-нибудь есть информация

$('.date > id', a) Эээ, эта деталь для > id выглядит неправильно. В элементах даты есть идентификатор. Вы пытаетесь это получить? Потому что это не дочерний элемент. Если так то вроде бы $('.date', a).prop('id')
Taplar 23.04.2018 21:38

Если вы новичок, вам не следует использовать jQuery. Вам следует изучить собственный API, чтобы понять, как работает DOM. В какой-то момент вы, вероятно, поймете, что все те сообщения в блогах от 2011 года, в которых говорилось, что вам нужно использовать jQuery, на самом деле просто больше не актуальны.

user2437417 23.04.2018 22:09
Поведение ключевого слова "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
2
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Получение атрибута id от даты для сортировки.

$('#datereleased').on('click', function(){
  var $sortContainer = $('#sortcontainer');
  
  $sortContainer.append(
    $sortContainer.children().sort(function(a, b){
      return (
        parseInt($('.date', a).attr('id'), 10)
        -
        parseInt($('.date', b).attr('id'), 10)
      );
    }).get()
  );
});
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id = "datereleased">Date Released</button>

<div id = "sortcontainer">
  <li id = "60">
    <h2>Some game</h2>
    <h2 class = "date" id = "2015">(2015)</h2>
    <h3>45/100</h3>
  </li>

  <li id = "45">
    <h2>Some game</h2>
    <h2 class = "date" id = "2017">(2017)</h2>
    <h3>45/100</h3>
  </li>

  <li id = "80">
    <h2>Some game</h2>
    <h2 class = "date" id = "2013">(2013)</h2>
    <h3>45/100</h3>
  </li>
</div>

Спасибо, это сработало очарование. Я понимаю, что символ '>' выбирал дочерние элементы. поэтому попробуйте выбрать дочерний элемент класса даты. Могу я спросить, для чего нужен, 10 после attr ('id')? ваше здоровье

Richard Hewett 23.04.2018 22:08

10 - это база, по которой работает синтаксический анализ. Таким образом, вы можете при желании проанализировать строку в различных форматах, например 16, проанализировать строку, содержащую шестнадцатеричное значение. Я считаю, что по умолчанию установлено 10, но я всегда делаю это для ясности.

Taplar 23.04.2018 22:09

Вам нужно исправить свой селектор, чтобы настроить таргетинг на элементы h2, которые имеют класс date с id, вместо таргетинга на элементы с тегом с именем id.

Затем вы можете отсортировать это, выполнив вычитание значений атрибутов id и добавив предков li.

В этом примере не используется jQuery, а используется более новый синтаксис, например функции стрелок:

document.addEventListener("DOMContentLoaded", function() {
  document.querySelector("#datereleased").addEventListener("click", function() {
      var sc = document.querySelector("#sortcontainer");

      Array.from(sc.querySelectorAll('li > .date[id]'))
        .sort((a, b) => a.id - b.id)
        .forEach(el => sc.appendChild(el.closest("li")));
    });
});
<button id = "datereleased">Date Released</button>

<div id = "sortcontainer">

  <li id = "60">
    <h2>Some game</h2>
    <h2 class = "date" id = "2015">(2015)</h2>
    <h3>45/100</h3>
  </li>

  <li id = "45">
    <h2>Some game</h2>
    <h2 class = "date" id = "2017">(2017)</h2>
    <h3>45/100</h3>
  </li>

  <li id = "80">
    <h2>Some game</h2>
    <h2 class = "date" id = "2013">(2013)</h2>
    <h3>45/100</h3>
  </li>
</div>

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