2

我正在扩展这个例子 http://bl.ocks.org/tommyskg/6111032

每当我单击它时,我都在努力添加工具提示:我使用 d3.JS
http://onehackoranother.com/projects/jquery/tipsy/#download

      // Add a circle.
      marker.append("svg:circle")
                        .attr("r", 4.5)
                        .attr("cx", padding)
                        .attr("cy", padding)
                        .on("click",info)


     function info(){
        d3.select(this).tipsy({live: true});
      };

但是我收到了这个错误: 未捕获的类型错误:对象 [对象数组] 没有方法 'tipsy'

看来我两次使用 JQuery

我怎样才能减少这种冲突?

第二种方式:

我认为地图存在问题,因为工具提示可能隐藏在地图后面。我在显示相对时设置了工具提示的位置。我手动编码。

div.tooltip {
  color: #222; 
  background: #fff; 
  padding: .5em; 
  text-shadow: #f5f5f5 0 1px 0;
  border-radius: 2px; 
  box-shadow: 0px 0px 2px 0px #a6a6a6; 
  opacity: 0.9; 
  position: relative;
}

var tooltip = d3.select("#map").append("div")

  function info(){
            tooltip.attr("class", "tooltip");
          };

     marker.append("svg:circle")
                            .attr("r", 4.5)
                            .attr("cx", padding)
                            .attr("cy", padding)
                            .on("click",info)

但我无法达到结果?有什么想法可以解决这个问题吗?

4

1 回答 1

0

问题一

tipsy是一个jQuery插件,因此您需要将 DOM 元素包装为jQuery对象(而不是d3选择)才能访问该tipsy函数:

function info () { $(this).tipsy({live: true}); }

问题二

我怀疑您正在将 a 附加divsvg元素。这是不允许的。

另外,我认为工具提示应该显示得很好:http ://bl.ocks.org/ilyabo/1373263

于 2013-12-03T15:00:19.303 回答