隐藏除选定系列之外的所有其他系列还显示下拉列表中的项目列表

时间:2016-06-06 07:49:41

标签: javascript jquery arrays highcharts

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

http://jsfiddle.net/b8chchjo/

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

boost::variant

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

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

$(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();
      }
    });
  });
});

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

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

1 个答案:

答案 0 :(得分: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/

我希望这对你有所帮助!