【问题标题】:svg rotate does not work with jQuery attr()svg 旋转不适用于 jQuery attr()
【发布时间】:2011-12-13 23:40:26
【问题描述】:

我遇到了与这里相同的问题:jQuery attr() fails to set attribute

很遗憾,提供的解决方案似乎不起作用。

这是我正在使用的代码:

var text     = document.createElement("text");
var dayLabel = document.createTextNode("test");
$(text).attr("transform", "rotate(30 0 0)");
$(text).append(dayLabel);
$(svg).append(text);

我不明白的是,当我查看 DOM 树(使用 Safari 的元素检查器)时,我看到该元素设置了 transform="rotate(90 0 0)",但旋转似乎失败了。

我的 jQuery 文件是最新的(1.7.1),我展示的代码包含在一个“类”中,该类在这段代码中被实例化:

$(document).ready(function() { ... right here ... });

...所以只有在 DOM 准备好时才会执行。

还有,不知道能不能帮上忙……

这段代码有效:

$("#schedule").append('<svg id="test2" xmlns="http://www.w3.org/2000/svg" version="1.1"><text transform="rotate(30 0 0)">blabla</text></svg>');

...但是这个没有:

$("#schedule").append('<svg id="test1" xmlns="http://www.w3.org/2000/svg" version="1.1"></svg>');
    $("#test1").append('<text transform="rotate(30 0 0)">blabla</text>');

基本上,它是相同的代码,但分别有 1 步和 2 步。同样,在这两种情况下,Safari 的 DOM 检查器仍然显示相同的内容,即 &lt;text transform="rotate(30 0 0)"&gt;blabla&lt;/text&gt;,但在第二种情况下,该元素根本不会显示在页面中。

【问题讨论】:

  • 您应该在 SVG 命名空间(即使用 document.createElementNS(...,'text'))中创建 SVG 节点(例如 &lt;text&gt;)。

标签: jquery svg transform attr


【解决方案1】:

你正在使用$(svg).append(text); $('svg').append(text);

这是一个有效的FIDDLE

我已经设置了一些文本属性和位置,但我认为它应该正是您所寻找的?

【讨论】:

  • 是的,svg 确实是一个变量(它是父 sv​​g 元素)。我试图复制/粘贴您的代码(仅删除 svg 周围的引号)但它不起作用,我认为 :( 我的屏幕上没有显示任何内容
  • 嗯...我也尝试过使用您的 HTML,并且成功了。我想我在某些时候做错了什么。无论如何,我知道现在可以做到。非常感谢 ! :)
  • 小提琴看起来不错,但您的回答并没有解释我认为这里的关键问题,即您使用的是document.createElementNS 而不是document.createElement
  • 最后一件事......我注意到它只有在我的 HTML 页面中放置一个“”标签时才有效。如果我尝试创建它并通过 JavaScript 将其放置在 DOM 树中,它就不起作用。知道为什么吗?
  • 在创建 SVG 元素时,您需要使用 NS 函数将元素与 SVG 命名空间相关联,因为评论者已经非常清楚地说明了这一点。因此,要动态创建所有内容,您将首先构建 svg 并设置正确的命名空间,然后将其附加到您的 html 文档中。这是一个修改后的FIDDLE 来展示它是如何完成的!
猜你喜欢
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
相关资源
最近更新 更多