javascript - <thead> 元素中的数据表排序和过滤

标签 javascript sorting datatable

我正在使用Datatables对我拥有的数据表进行排序/过滤。我希望能够在标题中对两者进行排序和过滤,但是,单击过滤器会使表排序,然后过滤器选择不会保持打开状态。

我这里有一个演示:http://codepen.io/jasonflaherty/pen/xOdqVV使用这种类型的想法:

<thead>
    <tr>
      <th><span class="header">Name</span><span class="filter"></span></th>
      <th><span class="header">Position</span><span class="filter"></span></th>
      <th><span class="header">Office</span><span class="filter"></span></th>
      <th><span class="header">Age</span><span class="filter"></span></th>
      <th><span class="header">Start date</span><span class="filter"></span></th>
      <th><span class="header">Salary</span><span class="filter"></span></th>
    </tr>
  </thead>

有没有办法让 bSort 单击整个 th 元素并使其仅在 class="header"上工作?

最佳答案

您可以使用 .off 函数删除 click事件来自<th>标签。然后向您想要的元素添加新的事件处理程序,在该事件处理程序中,您可以调用 DataTables API columns().order() .

根据您的代码,在要选择的附加选项之后添加此内容:

// your code
column.data().unique().sort().each(function(d, j) {
  select.append('<option value="' + d + '">' + d + '</option>')
});

// new code here
// remove original event handler
$(column.header()).off('click');

// register new event handler
$(column.header()).on('click', function(e) {
  // check click target is "<span class='header'>...</span>" or not
  if (e.target.nodeName !== 'SPAN' || !$(e.target).hasClass('header'))
    return;

  // call DataTables API to sort this column and redraw this table
  column
    .order($(this).hasClass('sorting_desc') ? 'asc' : 'desc')
    .draw();
});

注意:如果您只想<select>标签不触发排序事件。您可以添加 click事件处理程序至 <select>停止事件冒泡的元素。

例如:

var select = $('<select><option value=""></option></select>')
  .appendTo($(column.header()).find('span.filter').empty())
  .on({
    'change': function() {
      // Do something
    },
    'click': function(e) {
      // stop click event bubbling
      e.stopPropagation();
    }
  });

希望这有用。

关于javascript - <thead> 元素中的数据表排序和过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38130082/

相关文章:

javascript - CSS :When i click in one element two was clicked

database - 如何将特定的可变 "order"保存到数据库中

c# - 如何从简单的 DataTable 创建 DataGridViewComboBoxColumn

c# - 如何对 2 个数据表执行 Union All

javascript - 如何确保使用 Grunt 正确处理远程 @imports

javascript - 初始渲染后更新 View

javascript - JQuery 延迟更改 "this"

python - 在python中选择排序算法

c++ - 排序数组——issue

MYSQL - 如何用另一个表的对应行更新表的标题?