-1

テーブルの並べ替えの問題の解決策を見つけるのに問題があります。

私のテーブルは基本的にファイルディレクトリです:

Name          FileSize    FileType
folder1/      -           folder
folder2/      -           folder
abc.pdf       3.2MB       pdf
def.jpg       1.2MB       jpg
ghi.doc       1.5MB       doc

どの列がソートされていても、ディレクトリはテーブルの一番上にとどまりたいです。たとえば、「名前」で並べ替えると、ディレクトリが名前で並べ替えられ、次にファイルが名前で並べ替えられます。基本的に、すべての並べ替えでは、最初にFileTypeで並べ替える必要があります。「フォルダ」が一番上の値で、次に名前またはファイルサイズで並べ替えます。

私は悪名高い「Frequency-Decoder」ソートスクリプトを使用していましたが、それが簡単になれば、別のスクリプトを歓迎します。

4

3 に答える 3

0

それについてどう思いますか。ソート スクリプトは、オブジェクトがフォルダであるかどうかを確認し、それを一番上に配置してから、実際のソート (フォルダとフォルダ、ファイルとファイル) を処理します。

var files = [
  {
    name    : 'folder2/',
    filesize: null,
    filetype: 'folder'
  },
  {
    name    : 'folder1/',
    filesize: null,
    filetype: 'folder'
  },
  {
    name    : 'def.jpg',
    filesize: '1.2',
    filetype: 'jpg'
  },
  {
    name    : 'abc.pdf',
    filesize: '3.2',
    filetype: 'pdf'
  },
  {
    name    : 'ghi.doc',
    filesize: '1.5',
    filetype: 'doc'
  },
  {
    name    : 'jkl.doc',
    filesize: '1.1',
    filetype: 'doc'
  },
  {
    name    : 'pqr.pdf',
    filesize: '3.5',
    filetype: 'pdf'
  },
  {
    name    : 'mno.pdf',
    filesize: '3.5',
    filetype: 'pdf'
  }
];

/**
 * Sort an array of files and always put the folders at the top.
 * @access public
 * @param  {Array} array to sort
 * @param  {String} column to sort
 * @param  {Bool} asc
 * @return void
 */
function sortBy(array, column, asc) {
  if (asc == null) {
    asc = true;
  }

  array.sort(function(a, b) {

    // Put at the top the folders.
    if (a.filetype == 'folder' && b.filetype != 'folder') {
      return false;

    // Sort between folders.
    // The folders don't have a filesize and the type is always the same.
    // Process as a sort by name.
    // It doesn't need to respect the sens of sorting.
    } else if ((column == 'filesize' || column == 'filetype') && a.filetype == 'folder' && b.filetype == 'folder') {
      return a.name > b.name;

    // Normal sort.
    // The folders will be sorted together and the files togethers.
    } else {
      return asc ? a[column] > b[column] : a[column] < b[column];
    }

  });
}

sortBy(files, 'name', false);
console.log('by name', files);

sortBy(files, 'filesize', true);
console.log('by size', files);

sortBy(files, 'filetype', false);
console.log('by type', files);
于 2013-03-08T13:09:23.877 に答える
0

各フォルダ名について、文字列 String.fromCharCode(0) を先頭に追加します。これらは常に他の文字列の前にアルファベット順に表示されますが、名前だけとして表示されます。

例えば

String.fromCharCode(0)+"folder1/";
String.fromCharCode(0)+"folder2/";

ただし、比較には注意してください

String.fromCharCode(0)+"folder1/" は "folder1/" と等しくありません

于 2013-03-08T13:04:25.873 に答える
0

あなただけのjquery tablesorterプラグインがあります。

http://tablesorter.com/docs/

このプラグインを使用すると、ショートするものを無効にすることができます

http://tablesorter.com/docs/example-meta-headers.html

于 2013-03-08T12:50:05.680 に答える