2015-04-23 14 views
5

Robię sortowanie na div, ale nie mogę wykonać sortowania. Używam jQuery.fn.sortElements. poniżej jest html.sortowanie nie działa w jquery

<div id="sortList"> 
    <div class="list" style="display: block;"> 
     <a onclick="openInfoWindow("10"); return false;" href="#"></a> 
     <div class="imgClass"> 
      <a onclick="openInfoWindow("10"); return false;" href="#"> 
      <img class="innerImg" alt="" src="img"> 
      </a> 
     </div> 
     <div class="inner"> 
      <div class="name">edata</div> 
     </div> 
    </div> 

    <div class="list" style="display: block;"> 
     <a onclick="openInfoWindow("10"); return false;" href="#"></a> 
     <div class="imgClass"> 
      <a onclick="openInfoWindow("10"); return false;" href="#"> 
      <img class="innerImg" alt="" src="img"> 
      </a> 
     </div> 
     <div class="inner"> 
      <div class="name">fdata</div> 
     </div> 
    </div> 

    <div class="list" style="display: block;"> 
     <a onclick="openInfoWindow("10"); return false;" href="#"></a> 
     <div class="imgClass"> 
      <a onclick="openInfoWindow("10"); return false;" href="#"> 
      <img class="innerImg" alt="" src="img"> 
      </a> 
     </div> 
     <div class="inner"> 
      <div class="name">cdata</div> 
     </div> 
    </div> 
</div> 

Poniżej znajduje się kod jquery, umieściłem alert, aby zobaczyć wynik, ale nic się nie dzieje.

$('.sortList').sortElements(function(a, b){ 
       alert($(a).find(".list").children(".inner").find(".name").text().toLowerCase())     
        return $(a).find(".list").children(".inner").find(".name").text().toLowerCase() > $(a).find(".list").children(".inner").find(".name").text().toLowerCase() ? 1 : -1; 
       }); 

Każda pomoc jest bardzo cenione

+0

Selektor ".sortList" znajduje każdy element z klasą sortList, jednak nie masz żadnych elementów z tą klasą. – Eterm

+0

Myślę, że powinieneś wywołać funkcję sortElements na elementach, które chcesz posortować, a nie ich kontener ... $ ('. SortList'). Children ('. List'). SortElements (function (a, b) –

+0

Ty robisz nie ma klasy o nazwie sortList, ale id – bmscomp

Odpowiedz

4

Spróbuj tego:

$('#sortList .list').sortElements(function(a, b){ 
     return $(a).children(".inner").find(".name").text().toLowerCase() > $(b).children(".inner").find(".name").text().toLowerCase() ? 1 : -1; 
}); 

Zobacz Fiddle

+0

świetnie! jak zawsze, krótkie i dokładne rozwiązania – Vikrant

+0

@ haim770 dzięki to działało :) –

2

Było kilka problemów.

  • $ (”sortList ") powinno być $ (" # so rtList ")," # "szuka identyfikatora z" sortList "i". " szuka klas z "sortList"
  • musisz wywołać sortElements na liście elementów nie kontenera więc $ (". sortList"). sortElements powinny być $ ("# sortList"). children (".list") .sortElements
  • w instrukcji return funkcji porównania musisz porównać a i b, a nie z
  • również w oświadczeniu zwrotnym nie musisz szukać ".list", możesz iść prosto do '.inner'

proszę zobaczyć JSFiddle: http://jsfiddle.net/qwmq61o5/1/

$('#sortList').children(".list").sortElements(function(a, b) { 
    return $(a).children(".inner").find(".name").text().toLowerCase() > $(b).children(".inner").find(".name").text().toLowerCase() ? 1 : -1; 
});