Ответ 1
Это довольно просто, просто добавьте еще несколько "ключей": пары "значение". Пример:
"children": [
{
"name": "Google",
"size": 3938,
"url": "https://www.google.com"
},
{
"name": "Bing",
"size": 3938,
"url": "http://www.bing.com"
}
]
Конечно, в вашем коде d3 вам нужно использовать теги append
<svg:a>
и установить их атрибут xlink:href
.
Вот некоторые html и d3-коды, которые могут вам помочь. Сначала вам нужно импортировать пространство имен xlink в свой html файл:
<html xmlns:xlink="http://www.w3.org/1999/xlink">
...
</html>
Затем в коде чертежа d3, в котором вы добавляете узлы для каждого элемента данных, вы обертываете элемент, который должен быть кликабельными ссылками, с тегом svg:a
:
nodeEnter.append("svg:a")
.attr("xlink:href", function(d){return d.url;}) // <-- reading the new "url" property
.append("svg:rect")
.attr("y", -barHeight / 2)
.attr("height", barHeight)
.attr("width", barWidth)
.style("fill", color)
.on("click", click); // <- remove this if you like
Возможно, вы захотите удалить обработчик кликов (который присутствует в исходном примере), удалив .on("click", щелчок), поскольку это может помешать поведению SVG по умолчанию.
Нажав на rect
, вы должны перейти к соответствующему url
.
Ссылки SVG могут быть не полностью реализованы во всех браузерах.
В качестве альтернативы вы можете изменить обработчик click
, чтобы прочитать URL-адрес из d.url
, и использовать его для ручной переадресации браузера на этот URL через JavaScript: window.location = d.url;
. Тогда вам не нужен тег svg:a
и код xlink
. Хотя добавление реальной ссылки (а не сценария) имеет преимущество, которое пользователь/браузер может решить, что делать (например, открыть на новой вкладке/странице). Это также помогает, если некоторые из ваших пользователей отключены JavaScript.