Javascript 更新到SVG 2时SVG元素损坏,为什么?

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

我有一个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合规性有什么关系

代码如下:

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);