【发布时间】:2016-05-06 03:32:29
【问题描述】:
我有修改路径的 S 命令的滑块。我希望源名称出现在它的路径上;但是如何删除以前创建的文本元素?我试图删除它(见下面的代码),但它不起作用。 dom 只是填充了额外的文本元素,并且路径上的文本随着它们开始相互堆积而变得越来越暗。如图所示,我什至尝试通过 id 检查文本元素,但没有成功。希望您能阐明如何删除文本元素,以便在修改每个 S 命令时只有一个。
我在这里添加了一个小提琴(在代码窗口的最底部附加文本): fiddle...
graph.links.forEach(function (d, i) {
//console.log(obj[0].text, graph.links[i].source.name, graph.links[i].linkid);
if (graph.links[i].source.name == obj[0].text) {
var linkid = graph.links[i].linkid;
var the_path = $("#" + linkid).attr("d");
var arr = $("#" + linkid).attr("d").split("S");
//update S command
$("#" + linkid).attr("d", arr[0] + " S" + scommand_x2 + "," + scommand_y2 + " " + scommand_x + "," + scommand_y);
svg.select("#txt_" + linkid).remove();
svg.selectAll("#" + linkid).data(graph.links).enter()
.append("text")
.attr("id", "txt_" + linkid)
.append("textPath")
.attr("xlink:href", function (d) {
return "#" + linkid;
})
.style("font-size", fontSize + "px")
.attr("startOffset", "50%")
.text("")
.text(graph.links[i].source.name);
}
});
【问题讨论】:
-
一个工作示例会很好,我们可以轻松调试。
-
我所需要的只是如何删除 svg 文本元素,最佳实践是我正在寻找的......我已经在互联网上搜索了解决方案,大多数都是 svg.select("#txt_ " + linkid).remove();但是这不起作用。
-
@Rob,如果您提供一个工作示例,您会更快地获得响应,因为其他人调试具体代码比根据您的代码假设什么不起作用更容易单独的sn-p。有很多地方可以创建简单的工作解决方案:jsfiddle、plnkr、jsbin、codepen 等等。
-
你显然选择了错误的 this ( svg.select("#idHere).remove();) 应该可以工作。我注意到你有两个追加,第二个是那个文本被附加到所以也许选择第二个?所以 ('#'+linkid) 而不是 ('#txt_'_linkid)
-
我加了一个小提琴。文字堆积如山。无法删除它们。基本上用户可以修改 S 命令,我将为他们提供包含文本的功能,然后通过可调整的 startOffset 将其移动到更靠近路径的末尾。
标签: javascript d3.js svg