我正在尝试构建像d3 js tree这样的树。我需要为该树的每个节点在该div中添加一个div和2或3个按钮。单击该节点按钮应显示弹出窗口。
我正在尝试这种功能 有other plugins similar to this。但我需要在d3 js树中使用它,因为它的导航和动画很流畅。
答案 0 :(得分:2)
我做到了:
根据我的经验,最好使用SVG元素而不是DIV(您可以将按钮显示为图像或形状,将文本显示为svg:text。
以下是一些代码:
function clickLabel(d) {
// this removes the popup if it was displayed on another node beforehand
// is=2 identifies markers...
d3.selectAll("[marker='2']").remove();
// Every node has an ID, and I add shapes to it
d3.select("[id_node='" + d.id + "']")
.append("image")
.attr("marker", 2)
.attr("xlink:href", "/Content/delete_item.png")
.attr("x", 0)
.attr("y", -50)
.attr("height", 32)
.attr("width", 32)
.on("click", removeItem);
d3.select("[id_node='" + d.id + "']")
.append("image")
.attr("marker", 2)
.attr("xlink:href", "/Content/edit.png")
.attr("x", -50)
.attr("y", -30)
.attr("height", 32)
.attr("width", 32)
.on("click", editItem);
d3.select("[id_node='" + d.id + "']")
.append("image")
.attr("marker", 2)
.attr("xlink:href", "/Content/add_item.png")
.attr("x", 20)
.attr("y", 10)
.attr("height", 32)
.attr("width", 32)
.on("click", addItem);
d3.select("[id_node='" + d.id + "']")
.append("image")
.attr("marker", 2)
.attr("xlink:href", "/Content/next_item.png")
.attr("x", -30)
.attr("y", 20)
.attr("height", 32)
.attr("width", 32)
.on("click", moveItem);
// Stop events or else it gets de-selected
event.stopPropagation();
}
希望这有帮助!
答案 1 :(得分:0)
您可以使用.append("svg:foreignObject")
将自定义html添加到d3 js树中的节点,例如jsfiddle example