javascript - 如何在 d3 js 中正确使用 SVG 中的 Use 标签?

标签 javascript html d3.js svg

我知道 d3 根据调用的顺序渲染元素。因此,如果我想在黑色矩形上渲染白色文本,我可以先调用矩形,然后调用白色文本。

但是,在我的特定情况下,我的矩形尺寸基于我的白色文本,所以我必须首先调用白色文本。

我发现的解决方法是使用use标签,但我无法让它工作,这是我当前的尝试:

正文:

      var textToolTip = gToolTip
        .append("text")

        .attr("id", "toUse")
        .text(.....)...

使用标签:

var useText = gToolTip.append("use").attr("xlink:xlink:href", "#toUse");

我也尝试过提供 textToolTip xlink:href 但没有成功。对于 use 标签,我尝试使用 xlink:href 而不是 xlink:xlink:href,但没有成功。我使用双 xlink 因为我发现了这个答案:How do I define an SVG doc under <defs>, and reuse with the <use> tag?

最佳答案

如果我理解正确的话,附加矩形,附加文本,然后根据文本调整矩形大小会更简单:

<!DOCTYPE html>
<html>

  <head>
    <script src="https://d3js.org/d3.v5.min.js"></script>
  </head>

  <body>
    <svg width="900" height="900"></svg>
    <script>
      
      var svg = d3.select('svg');
      
      var rect = svg.append("rect")
        .style("fill", "black")
        .attr("x", 20)
        .attr("y", 20);
      
      var text = svg.append("text")
        .text("Now is the time for all good men to come to the aid of their country")
        .attr("x", 20)
        .attr("y", 20)
        .attr("alignment-baseline","hanging")
        .style("fill","steelblue")
        .style("font-family", "arial")
        .style("font-size", "14pt")
        
      var bbox = text.node().getBBox();
      
      rect.attr("width", bbox.width);
      rect.attr("height", bbox.height);
    </script>
  </body>

</html>

关于javascript - 如何在 d3 js 中正确使用 SVG 中的 Use 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54972119/

相关文章:

rest - 使用Java REST API将Hive Data检索为JSON文档

javascript - d3 v4 : Stacking nested data?

javascript - 通过单击所选的 div 来填充输入

javascript - 我如何通过chrome的选择器获取元素?

php - 爆炸复选框循环php

javascript - 将 Dynamic Attr() 添加到 d3.tip

javascript - 如何在 HTML 网页中搜索某些字符串并使用 Javascript 设置它们的样式

javascript - React 不再需要 APP.js 中的 import 语句了吗?

html - 如何水平和垂直居中div中的图像

javascript - 单击按钮时删除划线并转到下面的行