显示div并隐藏其他 - d3.js

问题描述 投票:0回答:1

我在d3.js做了一个条形图。当我点击其中一个刻度线时,条形图下方会出现一个div,该div与该特定刻度相关联。因此,有24个刻度,包含24个匹配的div,其中包含有关这些刻度的信息。

这工作正常,但现在我希望所有其他div在我打开一个新的时候关闭。

这是我到目前为止的代码。我需要再次按下勾号才能关闭它。 Bar Chart

d3.selectAll(".tick")
     .on("click",clickme)

function clickme(d){
      var info = document.getElementById(""+d+ "");
      if (info.style.display === "none") {
      info.style.display = "block";
    } else {
      info.style.display = "none";
    }
}

这就是我的div的样子

<div style = "display:none" id="Coal CCS retrofit" class = "hidden"> 1 </div>
<div style = "display:none" id="Coal CCS new built" class = "hidden"> 2 </div>

我试图结合这个jQuery:

$(document).ready(function () {
  var $answers = $('.hidden');
  $(".member").click(function () {
      var $ans = $(this).next(".hidden").stop(true).slideToggle(100);
      $answers.not($ans).filter('.block').stop(true).slideUp();
  })
});

使用以下CSS:

.hidden {
  display:none;
}

当我使用Jquery时,div会弹出,​​并在此之后立即“向上滑动”。我认为这是因为刻度线没有类'成员',但我无法让它工作。

d3.js bar-chart show-hide axis-labels
1个回答
0
投票

一个更好的解决方案可能是让你的信息div共享一个公共类(例如下面的工具提示),然后在显示被点击的div之前隐藏所有这些。示例代码:

<div id="Coal CCS new built" class = "tooltip"> 1 </div>
<div id="Coal CCS new built" class = "tooltip"> 2 </div>
d3.selectAll(".tick")
     .on("click",clickme)

function clickme(d){
    // Select element that should be shown
    const element = d3.select("#"+d.id); // Or however you're deriving id

    // Determine whether the element needs to be shown or hidden
    const show = element.style('display') === 'none';

    // Hide any tooltip that may be shown
    d3.selectAll('.tooltip').style('display', 'none');

    // Show element, if appropriate
    if (show) element.style('display', 'block');
}
© www.soinside.com 2019 - 2024. All rights reserved.