使用jquery基于数组对类别或标记进行排序

时间:2014-11-08 05:41:58

标签: jquery sorting

我认为自己是业余网络程序员,需要一些帮助。我想要做的是按照特定顺序从我的网站上的博客帖子中排序我的类别或标签列表,以便于导航。只能使用脚本覆盖站点的默认排序顺序,并按使用情况进行排序。我想做的是按特定顺序排序,但不按字母顺序排序 - 我正在考虑根据另一个数组对数组进行排序。例如:

默认按使用情况排序

20,15,39

排序数组(可能包含尚未在网站上显示的内容)

39,30,15,31,1,60,20

脚本排序(根据排序数组中遇到的顺序对网页上的内容进行排序)

39,15,20

希望我有意义 - 不知道如何为此编码。我借用了一些代码按字母顺序排序,但正如我之前提到的,我想以特定的方式排序。这就是我目前所拥有的:

//Find out if a category list exists on the page
  if( $('.postsbycategory-block').length != 0 ){
    // Create empty array for later use
    var categories = []; 
    // Loop through each list item and get its name
    $('.postsbycategory-block ul li').each(function () {
      categories.push({
        categoryName: $(this).find('span.name').html(),
        listItem: $(this)
      });
    });
    // Sort the array by name
    categories.sort(function(a,b) {
      // Ensure a case-insensitive sort
      var c = a.categoryName.toUpperCase();
      var d = b.categoryName.toUpperCase();
      return (c > d) ? 1 : ((d > c) ? -1 : 0);
    });
    // Loop though each in order and move to end of HTML list.
    // That way, the first alphabetically ends up on top
    $.each(categories, function(index, object){
    object.listItem.appendTo(object.listItem.parent());
    });
 }

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

它可能会像这样......但是,你的categories数组需要一个数字/索引才能匹配。否则它根本不会起作用。

你不清楚这些数字的来源/来源。所以我只添加了一个任意的theSearchKey变量,它填充了searchNum。

if( $('.postsbycategory-block').length != 0 ){


var categories = []; 
var sortingArray = [ 23,42,22,45,56];
var endResult = [];


$('.postsbycategory-block ul li').each(function () {
  categories.push({
    categoryName: $(this).find('span.name').html(),
    listItem: $(this),
    theSearchKey: searchNum //this will be where you put the #, that will match the sort keys
    // However you are retrieving that.  I dont know, so Im just putting searchNum here.
    // You could hide it in a data field on the li element and do
   // theSearchKey: $(this).data('searchKey');
  });
});

sortingArray.forEach(function(key) {
var found = false;
    items = categories.filter(function(item) {
        if(!found && item.theSearchKey == key) {
           endResult.push(item);
           found = true;
           return false;
        } else {
           return true;}
    })
})

$.each(endResult, function(index, object){
   object.listItem.appendTo(object.listItem.parent());
});

}