SVG:为什么<p>元素没有显示在<foreignobject> </foreignobject> </p>中

时间:2015-03-12 17:12:45

标签: html css html5 svg

我正在尝试将<p>元素放在<foreignobject><svg>节点内的Chrome中,但我没有看到该文本。我检查了元素,DOM模型显示了我期望的结构。我通过从DOM模型中复制来创建这个jsfiddle并且看到它完全按照我在小提琴中所希望的那样工作。

稍微摸了一下头后,我开始查看两个标签中的属性(都在Chrome中),此时只有两件事突然出现,当我将鼠标悬停在<foreignobject>或小提琴中的<p>元素,它会显示一个灰色框,显示它所在的区域。当我在实际应用程序中执行此操作时,它对<foreignobject>执行相同操作,但我看不到<p>元素的任何内容。第二个区别是,在小提琴中,<p>元素的高度和宽度分别为54px和100px,但在实际应用中,它们都被报告为“自动”。

作为一项实验,我尝试在CSS中为'p'明确设置高度和宽度,但chrome只是将其显示为'无效属性'。

假设这是问题,我对于如何控制我不允许指定的属性有点迷茫。有人可以提供一些有关如何进一步调试的建议吗?显然我正在做的事情导致这种情况,但我不确定下一步该在哪里。

编辑:

我不知道为什么我之前没有注意到这一点,但我看到了可能有助于解释这一点的差异。小提琴将<p>元素的属性显示为:

  • p.description
  • HTMLParagraphElement
  • HTMLElement的
  • 节点
  • 事件目标
  • 对象

该应用程序显示以下属性:

  • P
  • SVGElement
  • 元素
  • 节点
  • 事件目标
  • 对象

我认为这与d3如何添加<p>元素有关。我将尝试创建一个用d3创建元素的小提琴。

1 个答案:

答案 0 :(得分:0)

我明白了。 Robert Longson的评论让d3的一些文档终于点击了我。我正在创建这样的<p>元素(fo是外来对象):

fo.append("p").attr("xmlns", "http://www.w3.org/1999/xhtml")

我将其更改为此,现在显示文字:

fo.append("xhtml:p")

感谢您的帮助。

相关问题