createSVGPoint不是函数吗?

Per*_*eck 2 javascript html5 svg

我需要获取一个<svg>元素的SVGPoint,但是由于某种原因,它在我的场景中不起作用。

考虑以下HTML

<body>

  <svg id="inline">

  </svg>
</body>
Run Code Online (Sandbox Code Playgroud)

和JavaScript

var s1 = document.getElementById('inline');
console.log('point', s1.createSVGPoint());

var s2 = document.createElement("svg");
s2.setAttribute("id", "inserted");
document.getElementsByTagName('body')[0].appendChild(s2);
console.log('point2', s2.createSVGPoint());  
Run Code Online (Sandbox Code Playgroud)

第一个“ point”按预期方式输出,但是“ point2”输出在chrome中显示错误:

Uncaught TypeError: s2.createSVGPoint is not a function
Run Code Online (Sandbox Code Playgroud)

我创建了一个小矮人来演示:

http://plnkr.co/edit/fh9kEppA4lR5hY7eA22x?p=preview

Per*_*eck 6

好吧,我想出了什么问题。动态创建SVG元素时,您需要告诉浏览器它与“常规” html元素具有不同的名称空间。我需要创建这样的元素:

document.createElementNS('http://www.w3.org/2000/svg', 'svg');
Run Code Online (Sandbox Code Playgroud)

内联编写HTML时,浏览器会以某种方式理解并推断出正确的名称空间。

如果您喜欢我,遇到了与Angular2一起使用的问题,则当前存在一个(alpha 38-alpha44)错误,该错误阻止svg元素正确创建,这实际上是我问题的根源。如果您也因为该错误而在这里,请查看以下内容:https : //github.com/angular/angular/issues/4506