Javascript 更新到SVG 2时SVG元素损坏,为什么?
我有一个SVG元素,用于渲染流程图中连接节点的线条。2018年10月初,它突然停止了在Chrome中的工作——SVG元素在DOM中的宽度和高度为0,尽管它定义了宽度和高度属性 在做了一些搜索之后,我发现Chrome最近将其标准更新为SVG2,但是这个SVG相当简单,我无法准确地找出是什么变化导致了这种情况 详情: SVG位于位置为:relative的常规DIV中。DIV正确显示并设置了高度和宽度 SVG有一个类,用于具有position:absolute。它似乎不再有任何样式,我无法通过DevTools编辑它的样式。我不确定它是否需要有一个风格开始 SVG中有一堆行元素,其他什么都没有。线条有类,它们的样式也不起作用 父DIV中确实有其他DIV元素(流程图中的节点)。这些元素都有位置:绝对 打开页面时,父DIV和SVG都不存在。它们是使用Javascript创建的 页面上没有其他SVG元素,也没有在任何地方使用“use”关键字 这与SVG 2合规性有什么关系 代码如下:Javascript 更新到SVG 2时SVG元素损坏,为什么?,javascript,css,svg,Javascript,Css,Svg,我有一个SVG元素,用于渲染流程图中连接节点的线条。2018年10月初,它突然停止了在Chrome中的工作——SVG元素在DOM中的宽度和高度为0,尽管它定义了宽度和高度属性 在做了一些搜索之后,我发现Chrome最近将其标准更新为SVG2,但是这个SVG相当简单,我无法准确地找出是什么变化导致了这种情况 详情: SVG位于位置为:relative的常规DIV中。DIV正确显示并设置了高度和宽度 SVG有一个类,用于具有position:absolute。它似乎不再有任何样式,我无法通过DevT
function appendElement(type,className,to,inner){
if (type === 'svg' || type === 'line'){
var el = document.createElementNS("https://www.w3.org/2000/svg", type);
if (className !== undefined) el.setAttribute("class",className);
} else {
var el = document.createElement(type);
if (className !== undefined) el.className = className;
}
to.appendChild(el);
if (inner !== undefined) el.innerHTML = inner;
return el;
}
流程图类中的函数
setInner(){
this.flowchart.innerHTML = '';
this.svg = appendElement('svg','bw-flowchart-svg',this.flowchart);
this.svg.setAttribute("width", 800);
this.svg.setAttribute("height", 500);
this.currentSize = [800,500];
this.listitems = [];
this.links = [];
for (var i in this.obj.nodes){
this.listitems.push(new BWBFlowchartNode(this,this.obj.nodes[i]));
}
for (var i in this.listitems){
this.listitems[i].createLinks();
}
this.checkSize();
}
createLinks函数添加所有线并设置它们的X和Y值。这些行被正确地添加到DOM中
以及应该应用的样式(但是svg和线条都没有任何样式)
下面的行不正确
document.createElementNS("https://www.w3.org/2000/svg", type);
SVG名称空间实际上是
document.createElementNS("http://www.w3.org/2000/svg", type);
这在SVG1.1中是正确的,在SVG2中是不变的。尽管名称空间看起来像URL,但实际上它不是URL。如果需要帮助,您需要发布代码。SVG 2中有很多更改,所有浏览器都在缓慢地实现这些更改。没有浏览器采用大爆炸的方法,Chrome的SVG 2实现与所有其他浏览器一样是不完整的。@MSC I添加了代码的相关部分。
document.createElementNS("http://www.w3.org/2000/svg", type);