Javascript 如何在D3.js中创建轴标记标签超链接

Javascript 如何在D3.js中创建轴标记标签超链接,javascript,d3.js,Javascript,D3.js,在D3.js中,如何将HTML元素/属性分配给勾号标签?我对制作它们的超链接特别感兴趣,但它可以推广到制作它们的图像,或者一些奇怪的东西,比如交替的div类 var data = [{"count": 3125,"name": "aaa"}, {"count": 3004,"name": "bbb"}... y = d3.scale.ordinal() .rangeRoundBands([0, height], 0.1) .domain(data.map(function (d

在D3.js中,如何将HTML元素/属性分配给勾号标签?我对制作它们的超链接特别感兴趣,但它可以推广到制作它们的图像,或者一些奇怪的东西,比如交替的div类

var data = [{"count": 3125,"name": "aaa"}, {"count": 3004,"name": "bbb"}...

y = d3.scale.ordinal()
    .rangeRoundBands([0, height], 0.1)
    .domain(data.map(function (d) {
      return d.name;
    }))

yAxis = d3.svg.axis().scale(y)
vis.append("g")
   .attr("class", "y axis")
   .call(yAxis)


因此,在JSFIDLE中,我如何链接到www.example.com/aaa、www.example.com/bbb、www.example.com/ccc等?

对于您发布的JSFIDLE,您可以选择所有字符串(这些是y轴刻度),然后使用
.on(“单击”,函数)
,链接每个标签。下面是一个工作示例:

d3.selectAll("text")
    .filter(function(d){ return typeof(d) == "string"; })
    .style("cursor", "pointer")
    .on("click", function(d){
        document.location.href = "http://www.example.com/" + d;
    });
我将您的JSFIDLE分叉,并将整个示例放在那里:


更好的解决方案是使用y轴值数组,并使用这些值过滤文档中的
文本
元素,而不是测试每个
文本
元素的数据是否为字符串。但是,最好的方法取决于代码的其余部分,因此可能会因应用程序而异。

对于您发布的JSFIDLE,您可以选择所有
文本作为字符串(这些是y轴记号),然后使用
.on(“单击”,函数)
,链接每个标签。下面是一个工作示例:

d3.selectAll("text")
    .filter(function(d){ return typeof(d) == "string"; })
    .style("cursor", "pointer")
    .on("click", function(d){
        document.location.href = "http://www.example.com/" + d;
    });
我将您的JSFIDLE分叉,并将整个示例放在那里:


更好的解决方案是使用y轴值数组,并使用这些值过滤文档中的
文本
元素,而不是测试每个
文本
元素的数据是否为字符串。但是,最好的方法取决于代码的其余部分,因此应用程序可能有所不同。

要使用图像创建axis,您需要自己创建图像,而不是使用
d3.svg.axis()
。这将创建具有一定宽度的浮动
li
标记

// generate axis
x = d3.scale.linear().range([min, max]).domain([minValue, maxScaleValue]);
xAxis = d3.scale.identity().domain([minValue, maxScaleValue]);
var ticks = xAxis.ticks(10);
if (ticks.length) {
    var tickDiff = Math.abs(ticks[1] - ticks[0]);
    scope.legend
        .selectAll('li')
        .data(ticks)
        .enter()
        .append('li')
        .text(xAxis)
        .style('width', x(tickDiff));
}
scope.legend
    .selectAll("li")
    .data(ticks)
    .exit()
    .remove();

还有一点对我帮助很大

要使用图像创建axis,您需要自己创建它们,而不是使用
d3.svg.axis()
。这将创建具有一定宽度的浮动
li
标记

// generate axis
x = d3.scale.linear().range([min, max]).domain([minValue, maxScaleValue]);
xAxis = d3.scale.identity().domain([minValue, maxScaleValue]);
var ticks = xAxis.ticks(10);
if (ticks.length) {
    var tickDiff = Math.abs(ticks[1] - ticks[0]);
    scope.legend
        .selectAll('li')
        .data(ticks)
        .enter()
        .append('li')
        .text(xAxis)
        .style('width', x(tickDiff));
}
scope.legend
    .selectAll("li")
    .data(ticks)
    .exit()
    .remove();

还有一点对我帮助很大

当然,在创建我想要的链接时,您是否知道是否有方法插入标记?这不容易概括(添加其他HTML元素),而且对我来说很重要的是,光标不会变成大多数人认为是超链接的手形图标。我编辑了这篇文章,将光标改为指针(手形图标)。我不相信有一种简单的方法可以修改轴以包含任意HTML元素。但这可能是一个不同的问题?当然,我想创建一个链接,但你知道有没有办法插入标记?这不容易概括(添加其他HTML元素),而且对我来说很重要的是,光标不会变成大多数人认为是超链接的手形图标。我编辑了这篇文章,将光标改为指针(手形图标)。我不相信有一种简单的方法可以修改轴以包含任意HTML元素。但这可能是另一个问题?