2013-02-27 4 views
1

Я строю сценарий сортировки таблицы jQuery. Да, да, я знаю, что для этого есть плагины, но где весело избавляться от чужих пальто (не говоря уже о полном отсутствии обучения и понимания)?jQuery Точное совпадение числа для таблицы Сортировка

Итак, у меня есть хорошая сортировка для альфа-типов, теперь я работаю над числовым типом.

Так быстро и грязно. Я получаю значения столбцов и подтолкнуть их в массив:

var counter = $(".sort tr td:nth-child("+(columnIndex+1)+")").length; 

    for (i = 1; i <= counter; i++) { 
     columnValues.push($(".sort tr:eq("+i+") td:eq("+columnIndex+")").text()); 
    } 

Я затем сортировать их массив:

columnValues.sort(function(a,b){ 
     return a-b 
    }); 

я затем проверить уникальные записи (это в основном для тех же имен):

$.each(columnValues, function(i, el){ 
     if($.inArray(el, uniqueColumns) === -1) uniqueColumns.push(el); 
    }); 

Затем я использую массив в виде списка ключей для получения данных из таблицы и нажатия в другой массив. Здесь возникает проблема. Для имен это работает просто отлично, но с номером (т. Е. 3, 30, 36) это не так. С отсортированным списком, начиная с 3, он видит 3 в 30 и/или 36 и захватывает его.

Вот что я пробовал:

for (i = 0; i < counter; i++) { 
     var key = uniqueColumns[i]; 

     $(".sort tr:contains("+key+") td").each(function(){ 
      rowValues.push($(this).text()); 
     }); 

    } 

И:

for (i = 0; i < counter; i++) { 
     var key = uniqueColumns[i]; 

     $(".sort tr td").filter(function(i){ 
      if($(this).text() === key) { 
       rowValues.push($(this).text()); 
      } 
     }); 
    } 

Вот скрипка работает код с первым набором кода (который работает лучше, чем вторая):

ОБНОВЛЕНИЕ:

Также попробовал это (все еще не работает, работает для начального сортировки b не последующие):

for (i = 0; i < counter; i++) { 
     var key = uniqueColumns[i]; 
     var found = false; 

     $(".sort tr:contains("+key+")").filter(function(j){ 
      $(this).children().each(function(){ 
       if ($(this).text() === key) { 
        found = true; 
       } 
      }); 

      $(this).children().each(function(){ 
       if (found) { 
        rowValues.push($(this).text()); 
       } 
      }); 
     }); 
    } 
+1

Если вы действительно хотели избежать езды на чужой кокетливости, вы не использовали бы jQuery. ;-) – Blazemonger

+0

@Blazemonger LOL! Ну, я вижу большую разницу между использованием jQuery, тем, что я считаю каркасом более или менее, и просто подключением какого-то кода другого, но я получаю ваш jab: P – defaultNINJA

+0

@Blazemonger. Но если учесть этот аргумент, я должен просто начать с машинного кода и напишите мой собственный язык :) (да, правый lol) – defaultNINJA

ответ

0

Построено самостоятельно. Решил совершенно иной подход. Я создал многомерный массив из данных таблицы, а затем создал пользовательскую функцию сортировки, которая работает как для числовых, так и для альфа-данных. Вот функция, которая получает данные, сортирует данные и перезаписывает таблицу.

function sort(column) { 
    var columnIndex = $(column).index(), 
    rowValues = []; 

    /* Get Data */ 
    $(".sort tr").not(":first-child").each(function() { 
     var innerArray = []; 

     $(this).find('td').each(function() { 
      innerArray.push($(this).text()); 
     }); 

     rowValues.push(innerArray); 
    }); 

    /* Sort Data */ 
    rowValues.sort((function(index){ 
     return function(a, b){     
      if (!isNaN(a[index])) { 
       a[index] = parseInt(a[index]); 
      } 

      if (!isNaN(b[index])) { 
       b[index] = parseInt(b[index]); 
      } 

      return (a[index] === b[index] ? 0 : 
        (a[index] < b[index] ? -1 : 1)); 
     }; 
    })(columnIndex)); 

    /* Replace Data */ 
    $(".sort tr").not(":first-child").each(function(i){ 
     $(this).find("td").each(function(j){ 
      $(this).replaceWith("<td>"+rowValues[i][j]+"</td>"); 
     }); 
    }); 
} 
Смежные вопросы