【问题标题】:Adding Variables to href link for d3/javascript object tooltip将变量添加到 d3/javascript 对象工具提示的 href 链接
【发布时间】:2012-12-11 21:40:08
【问题描述】:

这就是我正在做的事情:

var selection = canvas.selectAll("circle").data(data);      
selection.enter().append("circle")
    selection
      .attr("title", function(d){ return "<div class='candtip'>"+d.Name+"<br /><a
        href='Twitter.com/'+d.Twitter><img src='Twitter.png'/></a></div>"})

因此,对于每个元素,我都会显示一个显示 Twitter 徽标的工具提示,然后我希望当您单击该图片时,它会将您带到该人的 Twitter 页面,但我似乎无法获得 href 部分正常工作。数据的设置方式是 'd.Twitter' 是一个变量,它保存了那个人的 Twitter 页面的 id,所以如果页面是 Twitter.com/OprahWinfrey,那么 d.Twitter = OprahWinfrey。

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript html tooltip d3.js href


    【解决方案1】:

    试试:

    var selection = canvas.selectAll("circle").data(data);      
    selection.enter().append("circle")
        selection // no need for this here
          .attr("title", function(d){ return "<div class='candtip'>" + d.Name + "<br /><a
            href='Twitter.com/" + d.Twitter + "'><img src='Twitter.png'/></a></div>"})
    

    【讨论】:

      【解决方案2】:

      我不确定您使用的哪个浏览器可以在 title 属性创建的工具提示中呈现 html。 AFAIK,您只能将纯文本放在工具提示中(即,在title 属性中)。如果您想要可点击的 html 工具提示,您需要自己创建它们,例如,使用 SVG 标签和组。

      这是一个相当完整的示例,您可以根据自己的目的进行剖析:

      <style>
          circle { fill: #8ad; }
          rect   { fill: white; stroke: #eee; }
          g.candtip         { display: none;  }
          a:hover g.candtip { display: block; }
          g.candtip:hover   { display: block; }
      </style>
      
      <svg width="600" height="600" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"></svg>
      
      <script type="text/javascript">
      var getY         = function(d,i) { return 100 + i*100; }
      var getTranslate = function(d,i) { return "translate(100,"+getY(d,i)+")"; }
      var data = [ 
          {Name: "Uwe Jugel", Twitter: "ubunatic"},
          {Name: "Juve",      Twitter: "ubunatic"}
      ]
      var canvas = d3.select("svg")
      var selection = canvas.selectAll("a").data(data)
      var newLinks = selection.enter().append("a")
      
      newLinks
      .attr("xlink:target","_blank")
      .attr("xlink:href", function(d,i) { return "http://twitter.com/"+d.Twitter; })
      
      newLinks.append("circle")
      .attr("cx", 100)
      .attr("cy", getY)
      .attr("r", 40)
      
      var newTooltips = newLinks.append("g").attr("class", "candtip")
      newTooltips.attr("transform", getTranslate );
      
      newTooltips.append("rect")
      .attr("x", 0)
      .attr("y", 0)
      .attr("width", 100)
      .attr("height", 30)
      
      newTooltips.append("text")
      .attr("x", 30)
      .attr("y", 20)
      .text( function(d,i) { return d.Name; } )
      
      newTooltips.append("svg:image")
      .attr("xlink:href", "https://twitter.com/images/resources/twitter-bird-16x16.png")
      .attr("x", 5)
      .attr("y", 5)
      .attr("width",  "16px")
      .attr("height", "16px")   
      </script>
      

      它基本上设置了一个可悬停的circle 和一个工具提示组g.candtip。工具提示是通过简单的:hover 规则完成的。 SVG 中的链接是通过&lt;a&gt; + xlink:href 完成的。所有数据都由 d3 + d3.style 辅助函数读取和转换。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多