Переупорядочить div и их детей - PullRequest
3 голосов
/ 20 сентября 2011

Я пытаюсь переупорядочить div на основе определенных значений, которые они содержат.Мой код выглядит следующим образом:

HTML

<div id="content_id_1">
  <ul>
    <li> some text, not important for the reordering but it must move with it's parent div</li>
    <li> some text, not important for the reordering but it must move with it's parent div</li>
    <li>
      <div class=‘date--2011-11-11’>2011-11-11’< /div> 
    </li>
  </ul>
</div>
<div id="content_id_2">
  <ul>
    <li> some text, not important for the reordering but it must move with it's parent div</li>
    <li> some text, not important for the reordering but it must move with it's parent div</li>
    <li>
      <div class=‘date--2011-10-10’>2011-10-10’< /div> 
    </li>
  </ul>
</div>

И так далее ...

При изменении фильтра с именем #data_filter мне нужен основной div (те, что с content_id_something)и весь их контент будет переупорядочен по значению даты ... Я попытался адаптировать следующий пример (/1423042/jquery-sortirovka-div-v-sootvetstvii-s-soderzhaniem-razlichnyh-sub-div),, но я немного потерян ... JQuery:

$("#data_filter").change(function(){
    function sortDateASC(a, b){
        return $(a).find(div[class^=date--])  > $(b).find(div[class^=date--])  ? 1 : -1;
   };
$(div[class^=date--]) .each(function(){
    $(this).parent().parent().parent().sort(sortDateASC);
   }); 
}) ;

Большое спасибо заваша помощь!

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

как то так:

$("#data_filter").change(function(){
  function sortDateASC(a, b){
    var keya = new Date($(a).find('div[class^="date--"]').text().replace("'","")).getTime();
    var keyb = new Date($(b).find('div[class^="date--"]').text().replace("'","")).getTime();
    return keya > keyb ? 1 : keya < keyb ? -1 : 0;
  }
  $('div[class^="date--"]') .each(function(){
    $(this).closest("#listparent").children().sort(sortDateASC).appendTo("#listparent");
  }); 
});

, где список заключен в элемент с идентификатором listparent

Редактировать: вот скрипка: http://jsfiddle.net/EUkPb/

0 голосов
/ 20 сентября 2011

вы можете сравнивать только значения, а не объекты jquery. так что вы можете попробовать:

return $(a).find(div[class^=date--]).attr('class')  > $(b).find(div[class^=date--]).attr('class') ? 1 : -1;

не уверен, работает ли он, хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...