Javascript 如何在D3.js中创建轴标记标签超链接
在D3.js中,如何将HTML元素/属性分配给勾号标签?我对制作它们的超链接特别感兴趣,但它可以推广到制作它们的图像,或者一些奇怪的东西,比如交替的div类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
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元素。但这可能是另一个问题?