Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][jQuery]Jak posortować dane w tablicy ?
Forum PHP.pl > Forum > Przedszkole
phpamator
Hejka przedszkolacy!
To znowu ja, ten beznadziejny phpamator z kolejnym beznadziejnym problemem. (chyba powinienem zmienić nick z "phpamator" na "beznadziej") wink.gif
Otóż kod tworzący listę który dostałem w spadku jest tak skonstruowany, że żeby w jakiś sensowny sposób go poukładać musiałbym go napisać chyba od zera toteż postanowiłem zajść go "od tyłu" albo może raczej od przodu czyli zamiast grzebać w kodzie zmienię kolejność po stronie przeglądarki.
Zacząłem więc od wyszukania wszystkich niezbędnych elementów no i wrzuciłem je do tablicy.
Nie mogę sobie jednak poradzić z samym ich ułożeniem w/g np pierwszej litery nazwy.
  1. jQuery(document).ready(function(){
  2. var alfa = [];
  3. function order(){
  4. var alfaArr = [];
  5. jQuery('.layered-navigation,.option-block').each(function(){
  6. alfaArr.push(jQuery('.layered_navigation,.option-block', this).html());
  7. alfaArr.push(jQuery(this));
  8. alfa.push(alfaArr);
  9. //tu pojawia się problem z sortowaniem
  10. //tu znajduje się nazwa po której chciałbym poukładać elementy: jQuery('.layered_navigation,.option-block').find('div span').html();
  11. //ale nie mam pojęcia jak to zrobić :)
  12. alfa.sort();
  13. })
  14. }
  15. // na kliknięcie uruchamiam funkcję order() która wybiera elementy i ładuje je nieuporządkowane do tablicy alfaArr
  16. jQuery('#alfaBtn').on('click', function(){
  17. order();
  18. // wrzucam spowrotem elementy do diva "filter-block"
  19. for(var i=0; i<alfa.length; i++){
  20. jQuery('#filter-block').append(alfa[i][1]);
  21. }
  22. // Po wykonaniu czyszcze tablice
  23. alfa = [];
  24. })
  25. });


tu przykład jak wygląda jeden z elementów: (pogrubione to moja wartość w/g której chciałbym posortować)
  1. <div childblock_id="price" class="odd option-block-head toggle-block" style="cursor: pointer;">
  2. <span class="filter-title">Cena</span><span class="open-close">+</span>
  3. <div> tu jeszcze trochę zawartości ale tylko do pokazywania jeśli potrzebna :) </div>
  4. </div>

W tej chwili każdorazowe kliknięcie powoduje tylko przesuwanie się listy czyli to co jest na początku po kliknięciu przechodzi na koniec i tak mogę sobie klikać i patrzeć jak mi się przesuwają elementy po ekranie smile.gif

Podpowiedzcie jak to zrobić proszę.
phpamator
Niby tak, ale kiedy masz w tablicy taki kogiel mogiel ..... ?
Jak mam wskazać co jest a a co jest b ?

Widziałeś zawartość mojej tablicy ?

Muszę nad tym chwilę pomysleć
...
phpamator
Patrzę, patrzę ...... nie kumam ...... czyli co, ten mój kod mogę sobie darować ....
trueblue
Najlepiej gdybyś na początek ustalił co jest kompletnym blokiem.
W pierwszym przykładzie pokazałeś inną strukturę niż w ostatnim. I nie mam tu na myśli pełnej zawartości pokazanej w drugim przykładzie.
phpamator
W dużym uproszczeniu wygląda to tak:
  1. <!-- ten div można przyjąć będzie parent-->
  2. <dl class="filter-block">
  3.  
  4. <!-- a te będą dziećmi-->
  5. <div class="layered_navigation option-block">
  6. <div childblock_id="Two_Way_Talk" class="odd option-block-head toggle-block" style="cursor: pointer;">
  7. <span class="filter-title">Two-Way Talk</span>
  8. <span class="open-close">+</span>
  9. </div>
  10. </div>
  11.  
  12. <div class="layered-navigation option-block">
  13. <div childblock_id="price" class="odd option-block-head toggle-block" style="cursor: pointer;">
  14. <span class="filter-title">Price</span>
  15. <span class="open-close">+</span>
  16. </div>
  17. </div>
  18.  
  19. <div class="layered-navigation option-block">
  20. <div childblock_id="manufacturer" class="odd option-block-head toggle-block" style="cursor: pointer;">
  21. <span class="filter-title">Brands</span>
  22. <span class="open-close">+</span>
  23. </div>
  24. </div>
  25.  
  26. </dl>
  27. <hr/>
  28. <button id="sPrice" class="btnSort">Sort</button>


pokazuje mi już kolejne selektory ale jeszcze nie sortuje.
  1. function sortUsingNestedText(parent, childSelector, keySelector) {
  2. console.log(keySelector);
  3. var items = parent.children(childSelector).sort(function(a, b) {
  4. var vA = $(keySelector, a).text();
  5. var vB = $(keySelector, b).text();
  6. console.log('vA'+vA+' '+'vB'+vB)
  7. return (vA < vB) ? -1 : (vA > vB) ? 1 : 0;
  8. });
  9. parent.append(items);
  10.  
  11. }
  12. /* setup sort attributes */
  13. $('.layered-navigation,.option-block').each(function(){
  14. sortUsingNestedText($('.filter-block'), ".layered-navigation,.option-block", $(this).find('div').attr('childblock_id'));
  15. })

Temat zamknięty, zrobiłem smile.gif
  1. jQuery(document).ready(function(){
  2. function sortUsingNestedText(parent, childSelector, keySelector) {
  3. var items = parent.children(childSelector).sort(function(a, b) {
  4. var vA = jQuery(keySelector, a).text();
  5. var vB = jQuery(keySelector, b).text();
  6. console.log('vA'+vA+' '+'vB'+vB);
  7. console.log(keySelector);
  8. return (vA < vB) ? -1 : (vA > vB) ? 1 : 0;
  9. });
  10. parent.append(items);
  11. }
  12. child1 = "div.layered-navigation,.option-block";
  13. child2 = "div span.filter-title"
  14. sortUsingNestedText(jQuery('dl.filter-block'), child1, child2);
  15. })
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.