$cache[$key] = empty($arr) ? NULL : $arr; return $cache[$key]; } // 门户 获取需要在频道显示的栏目主题数据 function portal_channel_thread($fid) { global $forumlist; if (empty($fid)) return NULL; $orderby = array('tid' => 1); $page = 1; // 遍历所有在频道显示内容的栏目 $category_forumlist = channel_category($fid); $arrlist = array(); $forum_tids = array(); $tidlist = array(); if ($category_forumlist) { foreach ($category_forumlist as &$_forum) { // 频道显示数据 $arrlist['list'][$_forum['fid']] = array( 'fid' => $_forum['fid'], 'name' => $_forum['name'], 'rank' => $_forum['rank'], 'type' => $_forum['type'], 'url' => $_forum['url'], 'channel_new' => $_forum['channel_new'], ); $forum_thread = thread_tid__find(array('fid' => $_forum['fid']), $orderby, $page, $_forum['channel_new'], 'tid', array('tid')); // 最新信息按栏目分组 foreach ($forum_thread as $key => $_thread) { $forum_tids[$key] = $_thread; } unset($forum_thread); } $tidlist += $forum_tids; } unset($category_forumlist); // 获取属性对应的tid集合 list($flaglist, $flagtids) = flag_thread_by_fid($fid); empty($flagtids) || $tidlist += $flagtids; unset($flagtids); // 频道置顶 $stickylist = sticky_list_thread($fid); empty($stickylist) || $tidlist += $stickylist; // 在这之前合并所有二维数组 tid值为键/array('tid值' => tid值) $tidarr = arrlist_values($tidlist, 'tid'); // 在这之前使用$tidarr = array_merge($tidarr, $arr)前合并所有一维数组 tid/array(1,2,3) if (empty($tidarr)) { $arrlist['list'] = isset($arrlist['list']) ? array_multisort_key($arrlist['list'], 'rank', FALSE, 'fid') : array(); return $arrlist; } $tidarr = array_unique($tidarr); $pagesize = count($tidarr); // 遍历获取的所有tid主题 $threadlist = well_thread_find_asc($tidarr, $pagesize); // 遍历时为升序,翻转为降序 $threadlist = array_reverse($threadlist); foreach ($threadlist as &$_thread) { // 各栏目最新内容 isset($forum_tids[$_thread['tid']]) AND $arrlist['list'][$_thread['fid']]['news'][$_thread['tid']] = $_thread; // 全站置顶内容 isset($stickylist[$_thread['tid']]) AND $arrlist['sticky'][$_thread['tid']] = $_thread; // 首页属性主题 if (!empty($flaglist)) { foreach ($flaglist as $key => $val) { if (isset($val['tids']) && in_array($_thread['tid'], $val['tids'])) { $arrlist['flaglist'][$key][array_search($_thread['tid'], $val['tids'])] = $_thread; ksort($arrlist['flaglist'][$key]); $arrlist['flag'][$_thread['tid']] = $_thread; } } } } unset($threadlist); if (isset($arrlist['sticky'])) { $i = 0; foreach ($arrlist['sticky'] as &$val) { ++$i; $val['i'] = $i; } } if (isset($arrlist['flag'])) { $i = 0; foreach ($arrlist['flag'] as &$val) { ++$i; $val['i'] = $i; } } if (isset($arrlist['flaglist'])) { foreach ($arrlist['flaglist'] as &$val) { $i = 0; foreach ($val as &$v) { ++$i; $v['i'] = $i; } } } isset($arrlist['list']) AND $arrlist['list'] = array_multisort_key($arrlist['list'], 'rank', FALSE, 'fid'); return $arrlist; } ?>JavascriptJQuery to sort alphabetically a list with anchors - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

JavascriptJQuery to sort alphabetically a list with anchors - Stack Overflow

programmeradmin1浏览0评论

I have this list:

<ul id="demoOne" class="demo">
    <li><a href='http://site/Service.aspx?shId=1154'>Dhenie fotokopje aktesh nga dosja 12</a></li>
    <li><a href='http://site/Service.aspx?shId=1155'>Depozitim kerkesash Ankimore/Rekurse
        kunder vendimeve civile/penale 12</a></li>
    <li><a href='http://site/Service.aspx?shId=1156'>Dhenie Vendimesh12</a></li>
    <li><a href='http://site/Service.aspx?shId=1157'>Integrimi i Ish te Perndjekurve Polikite
        12</a> </li>
    <li><a href='http://site/Service.aspx?shId=1158'>Dhenie Drejtesie</a></li>
    <li><a href='http://site/Service.aspx?shId=1159'>Gjykata e Rrethit Gjyqësor Lezhë ushtron
        juridiksionin gjyqësor civil dhe penal në territorin e qarkut Lezhë të Republikës
        së Shqipërisë.</a></li>
</ul>

I want to alphabetically sort this list, using the anchor text, not the li text. How to do that?

I'm using this script to sort them by li text

function sortUnorderedList(ul, sortDescending) {
        var items = $('.demo li').get();
        items.sort(function(a,b){ 


          var keyA = $(a).text();
          var keyB = $(b).text();

          if (keyA < keyB) return -1;
          if (keyA > keyB) return 1;
          return 0; 

          var keyA = $(a).text();
          var keyB = $(b).text();

          if (keyA < keyB) return -1;
          if (keyA > keyB) return 1;
          return 0;

        });
        var ul = $('.demo');
        $.each(items, function(i, li){
          ul.append(li);
        });
    }

I have this list:

<ul id="demoOne" class="demo">
    <li><a href='http://site/Service.aspx?shId=1154'>Dhenie fotokopje aktesh nga dosja 12</a></li>
    <li><a href='http://site/Service.aspx?shId=1155'>Depozitim kerkesash Ankimore/Rekurse
        kunder vendimeve civile/penale 12</a></li>
    <li><a href='http://site/Service.aspx?shId=1156'>Dhenie Vendimesh12</a></li>
    <li><a href='http://site/Service.aspx?shId=1157'>Integrimi i Ish te Perndjekurve Polikite
        12</a> </li>
    <li><a href='http://site/Service.aspx?shId=1158'>Dhenie Drejtesie</a></li>
    <li><a href='http://site/Service.aspx?shId=1159'>Gjykata e Rrethit Gjyqësor Lezhë ushtron
        juridiksionin gjyqësor civil dhe penal në territorin e qarkut Lezhë të Republikës
        së Shqipërisë.</a></li>
</ul>

I want to alphabetically sort this list, using the anchor text, not the li text. How to do that?

I'm using this script to sort them by li text

function sortUnorderedList(ul, sortDescending) {
        var items = $('.demo li').get();
        items.sort(function(a,b){ 


          var keyA = $(a).text();
          var keyB = $(b).text();

          if (keyA < keyB) return -1;
          if (keyA > keyB) return 1;
          return 0; 

          var keyA = $(a).text();
          var keyB = $(b).text();

          if (keyA < keyB) return -1;
          if (keyA > keyB) return 1;
          return 0;

        });
        var ul = $('.demo');
        $.each(items, function(i, li){
          ul.append(li);
        });
    }
Share Improve this question edited Nov 15, 2012 at 9:49 MIlena asked Nov 15, 2012 at 9:41 MIlenaMIlena 2571 gold badge4 silver badges13 bronze badges 3
  • Do you know how to do it when using the li? If you do you should just change the identifier to $("li a") – PaperThick Commented Nov 15, 2012 at 9:45
  • $("li a") - this is bad way, it takes too long to work. You better add some class to all needed anchors and then pick em with $(".anchorClass"). – Vladislav Qulin Commented Nov 15, 2012 at 9:47
  • How is this HTML code generated? Can't you sort in there? – Geert Commented Nov 15, 2012 at 9:48
Add a comment  | 

3 Answers 3

Reset to default 11

try this:

$(function() {
    $.fn.sortList = function() {
    var mylist = $(this);
    var listitems = $('li', mylist).get();
    listitems.sort(function(a, b) {
        var compA = $(a).text().toUpperCase();
        var compB = $(b).text().toUpperCase();
        return (compA < compB) ? -1 : 1;
    });
    $.each(listitems, function(i, itm) {
        mylist.append(itm);
    });
   }

    $("ul#demoOne").sortList();

});

You can use sort method.

$('#demoOne li').sort(function(a, b){
     return $('a', a).text() > $('a', b).text()
}).appendTo('#demoOne');

http://jsfiddle.net/w3jfF/

You can use jQuery to get all the li. Then use toArray to get a javascript native array. And you can sort your array using the sort method and providing a sort function corresponding to your needs.

发布评论

评论列表(0)

  1. 暂无评论