D3.js D3超链接节点:URL模式+;{d.url}

D3.js D3超链接节点:URL模式+;{d.url},d3.js,D3.js,在D3中,当创建超链接节点(圆形包布局)时,有一种方法可以使用基本URL模式,然后使用{d.URL}指定每个给定的网页。我正在为我的网站使用Drupal,我希望节点能够链接回该网站。Drupal使用的URL结构为www.Drupal.org/blogpost/[post_id]。我可以从数据库中获取post_id好的,我只是不知道如何将其连接到“xlink:href”部分?我想可能是 node.append(“a”) .attr(“xlink:href”,函数(d){return”http://

在D3中,当创建超链接节点(圆形包布局)时,有一种方法可以使用基本URL模式,然后使用
{d.URL}
指定每个给定的网页。我正在为我的网站使用Drupal,我希望节点能够链接回该网站。Drupal使用的URL结构为www.Drupal.org/blogpost/[post_id]。我可以从数据库中获取post_id好的,我只是不知道如何将其连接到“xlink:href”部分?我想可能是

node.append(“a”)
.attr(“xlink:href”,函数(d){return”http://www.example.com/blogentry/...“+d.url})
.附加(“圆圈”)
.attr(“r”,函数(d){
返回d.r;
});


将基本URL和单个博客条目ID结合在一起让我感到困惑。任何帮助或线索都将不胜感激。

您用于构建URL的方法没有任何问题。可能您试图访问的值没有在数据数组中的对象上定义?例如,确保定义了
d.url

下面是一个小的工作示例,显示使用与您使用的相同方法工作的链接(也包括):

因为这些对象是圆形布局的结果,而不是原始数据数组中的元素

如果组织和id之间存在1-1映射(在示例数据中看起来是真的),则可以从组织中查找id。首先,您可以按如下方式构建查找表:

var idByOrg = {};
data.forEach(function (d) {
    idByOrg[d.Organisation] = d.entityid;
});
//Create nodes/circles
node.append("svg:a")
    .attr("xlink:href", function (d) {
        console.log(d); // Shows {key: "OrgUU", values: 1, parent: Object, depth: 2, value: 1…}
        var entityid = idByOrg[d.key];
        return "http://www.example.com/entityform/" + entityid;
    })
    .append("circle")
    .attr("r", function (d) {
        return d.r;
    });
然后按如下方式访问它:

var idByOrg = {};
data.forEach(function (d) {
    idByOrg[d.Organisation] = d.entityid;
});
//Create nodes/circles
node.append("svg:a")
    .attr("xlink:href", function (d) {
        console.log(d); // Shows {key: "OrgUU", values: 1, parent: Object, depth: 2, value: 1…}
        var entityid = idByOrg[d.key];
        return "http://www.example.com/entityform/" + entityid;
    })
    .append("circle")
    .attr("r", function (d) {
        return d.r;
    });
现在,如果您检查生成的URL,您会看到类似于“”和“”的内容

这里有一个可以这样做的


请注意,链接仅适用于圆树中的叶节点。我想下一步将只包括叶节点上的链接,而不包括外圆。

好的,看起来一切都很好。你能做一把小提琴吗?然后我们就可以处理它并把它给你。看来你当前的代码是正确的,你试过了吗?谢谢。当我使用上面的模式时,我得到“”。问题是(我认为)从数据库中得到的不是完整的URL,它只是一个节点ID,例如01、02、03等。我需要找到一种方法,在节点ID之前插入根网站地址,。我将用一个小提琴来说明。这里有一个小提琴,当使用以下工具进行测试时,它会显示“localhost/NaN”:attr(“xlink:href”,function(d){return+d.url;})Hi!谢谢你的例子,也谢谢你在D3论坛上的回答。非常感谢!我整理了我的小提琴(里面有几个眼花缭乱的错误)。看看你的例子,我注意到你的
.data(data)
在代码中。当我把它放进去时,我得到了传递给
entityid
的正确值,但是我丢失了文本标签(
undefined
)。您关于
d.entity
未被定义为对象的观察是正确的。你有没有可能再详细一点?这篇文章似乎很有用:。再次感谢。很高兴这对你有帮助。我不知道你说的“我丢失了文本标签(未定义)”是什么意思。您指的是什么文本标签?我在您的原始示例中没有看到任何创建圆圈的文本标签,可能我遗漏了什么。另外,你可以发布一个链接到你的最新小提琴,演示这个问题吗?您原始帖子上的fiddle链接与以前的代码相同。很抱歉,这里有一个更新的fiddle:。它显示标有组织名称的每个节点/圆。我要看看我是否能够将
d.entity
定义为一个对象,并看看它是否消除了
未定义的
消息。adding
.data(data)
返回正确的
entityid
值,但防止出现圆圈:
节点.append(“svg:a”).data(data).attr(“xlink:href”,函数(d){返回“http://www.example.com/entityform/“+d.entityid;}).
等。如FIDLE所示:使用
for in
循环定义
entityid
返回正确的ID值(在控制台中),但不将其传递给xhref函数。
for(数据中的var key){if(data.hasOwnProperty(key)){var entityID=data[key][“entityID”];console.log(entityID);}}
更新的fiddle:.向前。。。