В этом ответе я предполагаю, что переменная dataTable
равна таковой объекта DataTable.
Во-первых,
Позволяет настроить функцию обратного вызова от Highcharts.
...
plotOptions: {
spline: {
events: {
legendItemClick: function() {
// Filters Go Here
}
},
showInLegend: true
}
}
...
Во-вторых,
Мы собираемся принять этот шаг дальше и добавить определить, когда серии переключены:
filters = []; // Set this inside your $(document).ready(function(e) {
...
plotOptions: {
spline: {
events: {
legendItemClick: function() {
tmp = [];
// Series was Visible, Now Hidden
if(this.visible){
// Add Action Here
}
// Series was Hidden, Now Visible
else{
// Add Action Here
}
}
},
showInLegend: true
}
}
...
В-третьих,
Теперь мы знаем, когда серия была переключена. Мы можем обнаружить, из какого состояния они пришли и из какого состояния они идут. Мы не собираемся настраивать фильтры для DataTables.
filters = []; // Set this inside your $(document).ready(function(e) {
...
plotOptions: {
spline: {
events: {
legendItemClick: function() {
tmp = [];
// Series was Visible, Now Hidden
if(this.visible){
filter.push(this.name);
}
// Series was Hidden, Now Visible
else{
var series = this.name;
$.each(filter, function(k, v){
if(v != series){
tmp.push(v);
}
});
filter = tmp;
}
}
},
showInLegend: true
}
}
...
Наконец,
Теперь у нас есть filter
массив, заполненный именами series
от Highcharts Legend. Нам нужно взять этот массив и применить его к фильтру.
filters = []; // Set this inside your $(document).ready(function(e) {
...
plotOptions: {
spline: {
events: {
legendItemClick: function() {
tmp = [];
// Series was Visible, Now Hidden
if(this.visible){
filter.push(this.name);
}
// Series was Hidden, Now Visible
else{
var series = this.name;
$.each(filter, function(k, v){
if(v != series){
tmp.push(v);
}
});
filter = tmp;
}
regex = (filter.length > 0 ? '^((?!('+filter.join('|')+')).)*$' : "");
dataTable.fnFilter(
regex,
0, // set this to your column index
true
);
}
},
showInLegend: true
}
}
...
Done!
регулярного выражения, используемые выше, ^((?!('+filter.join('|')+')).)*$
выступит отрицательный смотреть вперед с Implode из массива filter
с |
(труба) характера, как клей для OR
.