2017-02-17 11 views
0

Я пытаюсь создать функцию сортировки данных в Javascript, которая поместила бы одно значение (Total in my case) в самую последнюю из HTML-таблицы. Однако Total сортируется в алфавитном порядке.Нужен специальный сортировщик данных с Bootstrap, который ставит одно значение в самом конце

Вот мой код JavaScript:

function methodNameSorter(a, b) { 
    // Total must be at very end of the list of methods. 
    if (a === "Total" && b === "Total") return 0; 
    if (a === "Total") return 1; 
    if (b === "Total") return -1; 

    var result = a.localeCompare(b); 
    return result; 
} 

Вот HTML, который использует функцию в таблице через Bootstrap:

<table id="methods-summary-table" class="table table-hover" data-toggle="table" data-sort-name="name" data-sort-order="asc"> 
    <thead> 
     <tr> 
      <th data-field="name" data-sortable="true" data-sorter="methodNameSorter">Method name</th> 
      ... 
     </tr> 
    ... 
    </thead> 
... 
</table> 

Здесь является порядок сортировки я с этим кодом, и Итого должно быть в конце, но это не так:

Login 
Logout 
Total 
Transaction_A 
Verify_X 

Знаете ли вы, что я делаю неправильно?

+0

Каковы «а» и «б»? Являются ли они самим элементом или элементом? Если это элемент, вам нужно использовать 'if (a.innerHTML === 'Total')' вместо – Shilly

+0

'a' и 'b' - это строки ячейки. Я могу подтвердить это, отладив его в инструментах разработчика Chrome. – GDICommander

+1

Дважды щелкните этот код, потому что ваш код работает с массивом '['Login', 'Logout', 'Total', 'Transaction_A', 'Verify_X']', сортировка этого с помощью fn дает мне '' Login, Logout, Transaction_A, Verify_X, Total "' – Shilly

ответ

0

Total Проверки, выполненные над работой, это только аргументы, a и b, которые были не правы.

аргументы были в этом формате: <a href="#total">Total</a>

Вот обновленная функция Javascript, что имеет дело с <a href=...> тегом:

function methodNameSorter(a, b) { 
    // Keep the method name only (remove the <a href=...></a> tag). 
    var method_a = a.split('>')[1].slice(0, -3) 
    var method_b = b.split('>')[1].slice(0, -3) 

    // Total must be at very end of the list of methods. 
    if (method_a === "Total" && method_b === "Total") return 0; 
    if (method_a === "Total") return 1; 
    if (method_b === "Total") return -1; 

    var result = method_a.localeCompare(method_b); 
    return result; 
} 
+0

Итак, ответ: a и b не являются узлами html вообще. Это внешние HTTML этих узлов, а не сами узлы. Я надеюсь, что это в документах начальной загрузки, поскольку после того, как вы сказали мне, что отладчик говорит, что «a» есть «Total», я ошибочно предположил, что это весь узел, а не внешнийHTML. – Shilly