【问题标题】:Hide all other series except selected series. Also display the list of items in dropdown隐藏除选定系列之外的所有其他系列。同时在下拉列表中显示项目列表
【发布时间】:2016-06-06 07:49:41
【问题描述】:

我已经搜索了可以在下拉列表中显示项目列表并隐藏除选定系列之外的所有其他系列的解决方案。我找到了两种不同的解决方案

http://jsfiddle.net/b8chchjo/

此小提琴中的代码显示下拉列表中的项目列表

$(function() {
  $('#container').highcharts({
    legend: {
      enabled: false
    },
    series: [{
      name: 'Tokyo',
      id: 'Tokyo',
      data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
    }, {
      name: 'New York',
      id: 'New York',
      data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5]
    }, {
      name: 'Berlin',
      id: 'Berlin',
      data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]
    }, {
      name: 'London',
      id: 'London',
      data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
    }]
  }, function(chart) {

    var $customLegend = $('#customLegend').append('<select id="customSelect"></select>').find('select'),
      $option,
      serie;

    $customLegend.append('<option>Select serie</option>');

    $.each(chart.series, function(i, serie) {
      $customLegend.append('<option>' + serie.name + '</option>');
    });

    $customLegend.change(function() {

      $option = $(this).val();

      serie = chart.get($option);

      if (serie.visible) {
        serie.hide();
      } else {
        serie.show();
      }
    });
  });
});

http://jsfiddle.net/philfreo/Nkeep/85/

此小提琴中的代码显示所选系列并隐藏所有其他系列。

var chart = new Highcharts.Chart({
  chart: {
    renderTo: 'container'
  },
  xAxis: {
    categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
  },

  plotOptions: {
    series: {
      events: {
        legendItemClick: function(event) {
          var selected = this.index;
          var allSeries = this.chart.series;

          $.each(allSeries, function(index, series) {
            selected == index ? series.show() : series.hide();
          });

          return false;
        }
      }
    }
  },

  series: [{
    name: 'apples',
    data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
  }, {
    name: 'pears',
    data: [19.9, 81.5, 96.4, 119.2, 124.0, 166.0, 155.6, 138.5, 116.4, 144.1, 95.6, 54.4],
    visible: false
  }, {
    name: 'oranges',
    data: [119.9, 181.5, 46.4, 219.2, 24.0, 66.0, 255.6, 238.5, 16.4, 44.1, 95.6, 54.4],
    visible: false
  }]

});

但我试图在下拉列表中显示项目,也只显示选择的系列并隐藏所有其他系列。需要综合解决方案。

由于 Highcharts 是一个插件,我不明白如何编写代码。 请帮忙 !!!

【问题讨论】:

    标签: javascript jquery arrays highcharts


    【解决方案1】:

    任何类型的 HTML 表单元素(如下拉菜单)都需要位于图表代码之外。好消息是 Highcharts 可以轻松地与 HTML 事件交互(反之亦然)。

    这是我建立的下拉菜单:

    <select id="chooseSeries">
        <option value="all">show all series</option>
        <option value="0">show apples only</option>
        <option value="1">show pears only</option>
        <option value="2">show oranges only</option>
    </select>
    

    这是我构建的一个功能,可以根据您的选择显示和隐藏系列。基本上,这与您在 legendItemClick 事件中的代码相同,只是与下拉列表的更改有关。

    我添加了一个选项来显示所有系列;如果您愿意,请随时保留此功能。

    $('#chooseSeries').change(function () {
        // if "show all series" option selected, show all series
        if (this.value == "all") {
            $.each(chart.series, function(index, series) {
            series.show();
        });
        // otherwise, hide all series and then show only the one you selected
        } else {
            var selected = this.value;
            $.each(chart.series, function(index, series) {
                selected == index ? series.show() : series.hide();
            });
        }
    });
    

    这是一个修改后的小提琴,显示了这些变化:http://jsfiddle.net/brightmatrix/Nkeep/128/

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 2018-04-05
      相关资源
      最近更新 更多