2017-07-31 1 views
0

je besoin de votre aide, j'ai une longue liste semblable à ce qui suit:jquery Enregistrer l'ordre avant le tri

<div id="works"> 
<div class="item" data-date="20160312">Item2</div> 
<div class="item" data-date="20170227">Item5</div> 
<div class="item" data-date="20051201">Item1</div> 
<div class="item" data-date="20010515">Item3</div> 
<div class="item" data-date="20100418">Item4</div> 
…. 
</div> 

-je utiliser la méthode suivante jquery sort list based on data attribute value pour trier les articles par date, catégories ... mais Je devrais enregistrer la commande initiale avant le tri. L'idéal serait, par exemple, pour créer une fonction qui ajouterait une « origine des données » comme ceci:

<div id="works"> 
<div class="item" data-origin="1" data-date="20160312">Item2</div> 
<div class="item" data-origin="2" data-date="20170227">Item5</div> 
<div class="item" data-origin="3" data-date="20051201">Item1</div> 
<div class="item" data-origin="4" data-date="20010515">Item3</div> 
<div class="item" data-origin="5" data-date="20100418">Item4</div> 
…. 
</div> 

Avez-vous une solution? (J'utilise aussi infinitescroll qui charge la suite de la lite, il faudrait aussi que je puisse ajouter cette "data-origin" aux nouveaux éléments) Merci beaucoup!

+0

Pourquoi pas d'étiquette jQuery si vous utilisez déjà une solution jQuery pour le tri? Avec jQuery, cela se fait facilement avec un ['.each()'] (https://api.jquery.com/each/) et ['.data()'] (https://api.jquery.com/data /) -> [Centre d'apprentissage jQuery] (https://learn.jquery.com/) – Andreas

+0

Sans jQuery: ['document.querySelectorAll()'] (https://developer.mozilla.org/fr-fr/docs/Web/API/Document/querySelectorAll) + ['NodeList.prototype.forEach()'] (https://developer.mozilla.org/en-US/docs/Web/API/NodeList/forEach) + ['HTMLElement .dataset'] (https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset) – Andreas

Répondre

0

$('.item').each(function(index){ $(this).data('origin-order', index) }) 
 

 
$('.item').each(function(index){ console.log($(this).data('origin-order')) })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="works"> 
 
<div class="item" data-date="20160312">Item2</div> 
 
<div class="item" data-date="20170227">Item5</div> 
 
<div class="item" data-date="20051201">Item1</div> 
 
<div class="item" data-date="20010515">Item3</div> 
 
<div class="item" data-date="20100418">Item4</div> 
 
</div>

+0

C'est parfait !!! Désolé je suis un débutant, je cherchais plus compliqué ... Merci à tous! – tartartartar