Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取父对象的子对象以查找父对象的子对象文本宽度_Javascript_D3.js - Fatal编程技术网

Javascript 获取父对象的子对象以查找父对象的子对象文本宽度

Javascript 获取父对象的子对象以查找父对象的子对象文本宽度,javascript,d3.js,Javascript,D3.js,我需要得到文本的宽度,以便计算用作背景的矩形的宽度。我不知道如何遍历到父节点组,然后得到子节点的文本宽度,希望能得到一些帮助。下面是伪代码 用于尝试获取宽度的代码无效 错误如下: this.parentNode.select不是函数 以下是节点组的基本结构: 您可能希望使用bbox方法来实现这一点,如评论中所建议的 parentNode返回DOM元素,而不是D3选择,因此 this.parentNode.select('text') 不起作用,您需要使用: d3.select(this.par

我需要得到文本的宽度,以便计算用作背景的矩形的宽度。我不知道如何遍历到父节点组,然后得到子节点的文本宽度,希望能得到一些帮助。下面是伪代码

用于尝试获取宽度的代码无效

错误如下: this.parentNode.select不是函数

以下是节点组的基本结构:


您可能希望使用bbox方法来实现这一点,如评论中所建议的

parentNode返回DOM元素,而不是D3选择,因此

this.parentNode.select('text')
不起作用,您需要使用:

d3.select(this.parentNode)
然后,您可以选择文本元素,并从DOM元素本身而不是d3选择中获取其bbox:

d3.select(this.parentNode).select(text).node().getBBox();
然后,您可以通过bbox.width获得宽度。当然,您不需要在中间步骤中使用d3选项,但在您沿着这条路径开始时,我将在下面的第一个片段中继续使用它:

var data=[短字符串,长字符串]; var svg=d3.selectbody .svg; var g=svg.selectAllg .数据 进来 .附录 .attrtransform,函数d,i{ 返回translate+[20,i*20+20]+; }; g、 附属物 .身高20 .attrill,黄色; g、 附录文本 .textfunctiond{return d;} .attry,18岁; g、 selectAllrect .宽度、功能{ 让parentSelection=d3.selectthis.parentNode 让bbox=parentSelection.selecttext.node.getBBox; 让宽度=bbox.width; 返回宽度; }
获取文本的绑定框是否更容易:或者@RyanMorton很乐意使用绑定框,但我不知道如何迭代每个父对象的文本来计算它。当我尝试使用getBBox以及this.parentNode.select时出错。语法不正确。回答很好,一如既往。。。但是,您不需要获取元素,选择它并再次获取元素,只需一步即可完成:返回this.parentNode.children[1].getBBox.width;。看这里:也许我可以加粗第二部分?还是我遗漏了什么?哈哈哈,对不起!我没读过!是的,创建一个像解决方案2这样的粗体标题可以帮助像我这样的盲人。公平地说,我将隐藏第一个片段,并稍微格式化后半部分的可见性。很好,再次抱歉。另一方面,这就是为什么我通常在代码段中默认选择隐藏代码段,当代码太大时,人们有时不会像我在这里所做的那样向下滚动到最后。。。
d3.select(this.parentNode)
d3.select(this.parentNode).select(text).node().getBBox();