将变量添加到dref / javascript对象工具提示的href链接

时间:2012-12-11 21:40:09

标签: javascript html tooltip d3.js href

所以这就是我正在做的事情:

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。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分: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>"})

答案 1 :(得分:1)

我不确定您使用哪种浏览器可以在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中的链接是通过<a> + xlink:href完成的。所有数据都由d3 + d3.style辅助函数读取和转换。