Сортировщик таблиц jQuery — невозможно выполнить сортировку таблицы по столбцу таблицы (значения ячеек могут быть динамически изменены jQuery перед сортировкой)

#jquery #tablesorter

#jquery #сортировщик таблиц

Вопрос:

У меня есть таблица строк, в последней ячейке которой есть да или нет. Этот столбец не реагирует на сортировку и может быть изменен до изменения порядка сортировки, однако сортировка не выполняется.

Я не могу создать минимально полный проверяемый пример, но я могу сказать, что код инициализации так же прост, как.

 $(".tablesorter").tablesorter();  //this is inside a document.ready block
  

Все остальные строки сортируются, но та, которая этого не делает, вызывает недоумение, почему.

Это нулевая конфигурация?

Я также попытался связать приведенный выше вызов init с:

 $(".tablesorter").tablesorter({
            textExtraction: 'complex',
            headers: {
                10: {sorter: 'text'}   // 10 is the column number starting from the sortable columns
            }
        }); 
  

Но никаких изменений не происходит.

Как мне это исправить?

Ответ №1:

https://dotnetfiddle.net/MF18yG

Контроллер / ViewModels

 public class Row
{
    public string Col1 { get; set; }
    public string Col2 { get; set; }
    public string Col3 { get; set; }
    public string Col4 { get; set; }
    public string Col5 { get; set; }
    public string Col6 { get; set; }
    public string Col7 { get; set; }
    public string Col8 { get; set; }
    public string Col9 { get; set; }
    public string Col10 { get; set; }
}

public class Table
{
    public IList<Row> Rows { get; set; }
}
public class HomeController : Controller
{
    public ActionResult Index20()
    {
        var viewModel = new Table { Rows = new List<Row>() };
        var row1 = new Row
        {
            Col1 = "Col1",
            Col2 = "Col2",
            Col3 = "Col1",
            Col4 = "Col4",
            Col5 = "Col5",
            Col6 = "Col6",
            Col7 = "Col7",
            Col8 = "Col8",
            Col9 = "Col9",
            Col10 = "Yes"
        };
        var row2 = new Row
        {
            Col1 = "Col1",
            Col2 = "Col2",
            Col3 = "Col1",
            Col4 = "Col4",
            Col5 = "Col5",
            Col6 = "Col6",
            Col7 = "Col7",
            Col8 = "Col8",
            Col9 = "Col9",
            Col10 = "No"
        };
        var row3 = new Row
        {
            Col1 = "Col1",
            Col2 = "Col2",
            Col3 = "Col1",
            Col4 = "Col4",
            Col5 = "Col5",
            Col6 = "Col6",
            Col7 = "Col7",
            Col8 = "Col8",
            Col9 = "Col9",
            Col10 = "Yes"
        };
        var row4 = new Row
        {
            Col1 = "Col1",
            Col2 = "Col2",
            Col3 = "Col1",
            Col4 = "Col4",
            Col5 = "Col5",
            Col6 = "Col6",
            Col7 = "Col7",
            Col8 = "Col8",
            Col9 = "Col9",
            Col10 = "No"
        };
        var row5 = new Row
        {
            Col1 = "Col1",
            Col2 = "Col2",
            Col3 = "Col1",
            Col4 = "Col4",
            Col5 = "Col5",
            Col6 = "Col6",
            Col7 = "Col7",
            Col8 = "Col8",
            Col9 = "Col9",
            Col10 = "Yes"
        };
        viewModel.Rows.Add(row1);
        viewModel.Rows.Add(row2);
        viewModel.Rows.Add(row3);
        viewModel.Rows.Add(row4);
        viewModel.Rows.Add(row5);
        return View(viewModel);
    }
  

Вид

 @model WebApplication2.Controllers.Table
@using WebApplication2.Controllers
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index20</title>
    @*https://mottie.github.io/tablesorter/docs/*@
    <!-- choose a theme file -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.29.0/css/theme.default.min.css"
          integrity="sha256-kZJ4kB78IbXuxMtCpmaXzii8vxEKtu8pjicH62E0/qM=" crossorigin="anonymous" />
    <!-- load jQuery and tablesorter scripts -->
    <script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.31.3/js/jquery.tablesorter.min.js"></script>

    <!-- tablesorter widgets (optional) -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.31.3/js/jquery.tablesorter.widgets.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#myTable").tablesorter();
        });
    </script>
</head>
<body>
    <div>
        <table id="myTable" class="tablesorter">
            <thead>
                <tr>
                    <th>Col1</th>
                    <th>Col2</th>
                    <th>Col3</th>
                    <th>Col4</th>
                    <th>Col5</th>
                    <th>Col6</th>
                    <th>Col7</th>
                    <th>Col8</th>
                    <th>Col9</th>
                    <th>Col10</th>
                </tr>
            </thead>
            <tbody>
                @foreach (Row row in Model.Rows)
                {
                    <tr>
                        <td>
                            @row.Col1
                        </td>
                        <td>
                            @row.Col2
                        </td>
                        <td>
                            @row.Col3
                        </td>
                        <td>
                            @row.Col4
                        </td>
                        <td>
                            @row.Col5
                        </td>
                        <td>
                            @row.Col6
                        </td>
                        <td>
                            @row.Col7
                        </td>
                        <td>
                            @row.Col8
                        </td>
                        <td>
                            @row.Col9
                        </td>
                        <td>
                            @row.Col10
                        </td>
                    </tr>
                }
            </tbody>
        </table>
    </div>
</body>
</html>