Сортировка html по порядку сортировки, заполненному в массиве

#javascript #jquery #html #arrays #sorting

#javascript #jquery #HTML #массивы #сортировка

Вопрос:

Я пытаюсь отсортировать список html по расстоянию, я не хочу указывать свойство distance в своей разметке. Что я делаю, так это то, что я отображаю html-список хранилища, в js я создаю массив, в котором я сохраняю хранилище и расстояние.

 locations = [];
locations.push({
    'store': stores[i],
    'cordinate': Math.random()
});
  

Я сортирую это с помощью этого

 locations.sort(dynamicSort('cordinate'));

function dynamicSort(property) {
  var sortOrder = 1;

  return function(a, b) {
    var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;
    return result * sortOrder;
  }
}
  

Вот где я застрял, как я могу отсортировать свой html с помощью этого массива? Ключевым моментом здесь является то, что я не хочу загромождать свой html, устанавливая там cordinate.

Моя скрипка прямо здесь

Редактировать
Вопрос заключался в сортировке выходного html с порядком сортировки, заполненным в массиве. Там я удалил html и другие js, которые я использовал только из-за того, что ленился заполнять разметку.

Комментарии:

1. @hindmost для этого не имеет отношения к разметке se html. Но ладно.

2. Используемые вами шаблоны Handlebars весьма актуальны для вашего вопроса.

3. вы имеете в виду что-то вроде этого: jsfiddle.net/znttxbwm ?

4. сохраните элемент html в объекте ‘locations’, затем вы можете получить к нему отношение

5. @AdiDarachi У меня есть идентификатор в идентификаторе, который имеет ссылку на фактический элемент html, но вопрос в том, как мне это сделать?

Ответ №1:

По сути, все, что вам нужно сделать, это вызвать append для элементов html в порядке сортировки.

Это добавит элемент в конец элементов html.

 var sortHTML = function(locations) {
  $.each(locations, function(i, location) {
    var targetElement = $('#'   location.store.id);
    targetElement.parent().append(targetElement)
  });
};
sortHTML(locations);
  

скрипка здесь: https://jsfiddle.net/wbcj026x/1 /

Комментарии:

1. На самом деле это больше похоже на то, что я ищу. Но нет способа просто отсортировать? Я думаю, может ли это быть проблемой с производительностью.

2. чем это отличается от моего ответа?, он использует ту же функцию добавления

3. @Dejan.S, ответ отрицательный, нет способа перемещать html-элементы в DOM, а затем добавлять / отсоединять (добавление / удаление элемента из DOM)

4. @madalinivascu, разница в том, что вы сделали это во время выполнения, а мою функцию можно использовать после выполнения.