javascript - 使用 javascript 和一些跨浏览器支持将内容添加到 svg

标签 javascript html dom svg microsoft-edge

我正在尝试将一个元素添加到现有的 svg 文件中,它在 Chrome 和 Firefox 上运行良好。当我尝试边缘时,它似乎没有做任何事情,我所需要的只是让它在三个浏览器的最新版本上工作,但越多越好。

这是在 html 中声明的方式

 <object data="images/svg/MYSVG.svg" type="image/svg+xml" id="svg-object" onload="loadOnClick()"></object>

在我的 loadOnClick 调用中,我尝试像这样向其中添加一个元素

var svgObject = document.getElementById('svg-object');
var svgDoc = svgObject.contentDocument;

var tiptext = svgDoc.getElementById('ToolTipText');

let gs = svgDoc.getElementsByTagName('g');


gs[1].innerHTML += '<foreignObject id="homeButton" width="20" height="20" x="10px" y="10px"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style=" fill:#000000;"><a xlink:href="MYOTHERSVG.svg"><path fill="#124A92" d="M7.9,256C7.9,119,119,7.9,256,7.9C393,7.9,504.1,119,504.1,256c0,137-111.1,248.1-248.1,248.1C119,504.1,7.9,393,7.9,256z"></path><path fill="#FFF" d="M408.1,206.8l-150.1-74.9c-1.3-0.6-2.7-0.6-4,0l-150.2,74.9c-1.7,0.8-2.7,2.4-2.7,4.3v29.6c0,1.6,0.8,3.1,2.2,4c1.4,0.9,3.1,1,4.5,0.3l148.2-74l148.1,74c0.6,0.3,1.3,0.5,2,0.5c0.9,0,1.8-0.2,2.5-0.7c1.4-0.9,2.2-2.4,2.2-4V211C410.8,209.2,409.8,207.5,408.1,206.8z"></path><path fill="#FFF" d="M380.5 245.8L256 183.8 131.5 245.8 131.5 360.8 200.5 360.8 200.5 272.6 248 272.6 248 360.8 380.5 360.8z"></path><path fill="#124A92" d="M263.7 272.6H295.7V304.6H263.7z"></path></a></svg></foreignObject>';

再次,我不确定为什么它似乎在 Edge 中不起作用,但如果您有任何想法,请告诉我!

最佳答案

尝试在foreignObject元素中添加一个Div标签,如下所示:

    <foreignObject id="homeButton" width="20" height="20" x="20" y="20">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style=" widdth:30px; height:30px; fill:#000000;">
          <a xlink:href="MYOTHERSVG.svg">
            <path fill="#124A92" d="M7.9,256C7.9,119,119,7.9,256,7.9C393,7.9,504.1,119,504.1,256c0,137-111.1,248.1-248.1,248.1C119,504.1,7.9,393,7.9,256z"></path>
            <path fill="#FFF" d="M408.1,206.8l-150.1-74.9c-1.3-0.6-2.7-0.6-4,0l-150.2,74.9c-1.7,0.8-2.7,2.4-2.7,4.3v29.6c0,1.6,0.8,3.1,2.2,4c1.4,0.9,3.1,1,4.5,0.3l148.2-74l148.1,74c0.6,0.3,1.3,0.5,2,0.5c0.9,0,1.8-0.2,2.5-0.7c1.4-0.9,2.2-2.4,2.2-4V211C410.8,209.2,409.8,207.5,408.1,206.8z"></path>
            <path fill="#FFF" d="M380.5 245.8L256 183.8 131.5 245.8 131.5 360.8 200.5 360.8 200.5 272.6 248 272.6 248 360.8 380.5 360.8z"></path>
            <path fill="#124A92" d="M263.7 272.6H295.7V304.6H263.7z"></path>
          </a>
        </svg>
      </div>
    </foreignObject>

[注意]内部div应具有xmlns属性:xmlns="http://www.w3.org/1999/xhtml"

更详细的信息,请引用以下示例代码:

 <object data="Images/test.svg" type="image/svg+xml" id="svg-object"></object>

SVG 内容:

<?xml version="1.0" encoding="utf-8" ?> 
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="svg-object" width="800" height="800" onload="loadOnClick()">
    <script type="text/ecmascript">
        <![CDATA[
            function changeRectColor(evt) {
                var red = Math.round(Math.random() * 255);
                var green = Math.round(Math.random() * 255);
                var blue = Math.round(Math.random() * 255);
                evt.target.setAttributeNS(null,"fill","rgb("+ red +","+ green+","+blue+")");
            }      
           function loadOnClick() {
               console.log("hello");
               var svgObject = document.getElementById('svg-object');
               var svgDoc = svgObject.contentDocument;   

               let gs = svgObject.getElementsByTagName('g');   
               gs[1].innerHTML += '<foreignObject id="homeButton" width="20" height="20" x="200" y="200"><div xmlns="http://www.w3.org/1999/xhtml"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style=" fill:#000000;"><a xlink:href="MYOTHERSVG.svg"><path fill="#124A92" d="M7.9,256C7.9,119,119,7.9,256,7.9C393,7.9,504.1,119,504.1,256c0,137-111.1,248.1-248.1,248.1C119,504.1,7.9,393,7.9,256z"></path><path fill="#FFF" d="M408.1,206.8l-150.1-74.9c-1.3-0.6-2.7-0.6-4,0l-150.2,74.9c-1.7,0.8-2.7,2.4-2.7,4.3v29.6c0,1.6,0.8,3.1,2.2,4c1.4,0.9,3.1,1,4.5,0.3l148.2-74l148.1,74c0.6,0.3,1.3,0.5,2,0.5c0.9,0,1.8-0.2,2.5-0.7c1.4-0.9,2.2-2.4,2.2-4V211C410.8,209.2,409.8,207.5,408.1,206.8z"></path><path fill="#FFF" d="M380.5 245.8L256 183.8 131.5 245.8 131.5 360.8 200.5 360.8 200.5 272.6 248 272.6 248 360.8 380.5 360.8z"></path><path fill="#124A92" d="M263.7 272.6H295.7V304.6H263.7z"></path></a></svg></div></foreignObject>';

           }
        ]]>
    </script>
    <g id="firstGroup">
        <rect id="myBlueRect" width="200" height="150" x="120" y="40" fill="blue" onclick="changeRectColor(evt)" />
        <text x="120" y="40" font-size="13px">Click on rectangle to change it's color.</text>
        <foreignObject id="homeButton" width="20" height="20" x="20" y="20">
          <div xmlns="http://www.w3.org/1999/xhtml">
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style=" widdth:30px; height:30px; fill:#000000;">
              <a xlink:href="MYOTHERSVG.svg">
                <path fill="#124A92" d="M7.9,256C7.9,119,119,7.9,256,7.9C393,7.9,504.1,119,504.1,256c0,137-111.1,248.1-248.1,248.1C119,504.1,7.9,393,7.9,256z"></path>
                <path fill="#FFF" d="M408.1,206.8l-150.1-74.9c-1.3-0.6-2.7-0.6-4,0l-150.2,74.9c-1.7,0.8-2.7,2.4-2.7,4.3v29.6c0,1.6,0.8,3.1,2.2,4c1.4,0.9,3.1,1,4.5,0.3l148.2-74l148.1,74c0.6,0.3,1.3,0.5,2,0.5c0.9,0,1.8-0.2,2.5-0.7c1.4-0.9,2.2-2.4,2.2-4V211C410.8,209.2,409.8,207.5,408.1,206.8z"></path>
                <path fill="#FFF" d="M380.5 245.8L256 183.8 131.5 245.8 131.5 360.8 200.5 360.8 200.5 272.6 248 272.6 248 360.8 380.5 360.8z"></path>
                <path fill="#124A92" d="M263.7 272.6H295.7V304.6H263.7z"></path>
              </a>
            </svg>
          </div>
        </foreignObject>
    </g>

    <g id="secondGroup">
        <rect id="myBlueRect" width="200" height="150" x="220" y="220" fill="blue" onclick="changeRectColor(evt)" />
        <text x="220" y="220" font-size="13px">Click on rectangle to change it's color.</text> 
    </g>
</svg>

结果如下(使用Microsoft Edge 44.18362.1.0版本):

enter image description here

关于javascript - 使用 javascript 和一些跨浏览器支持将内容添加到 svg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58964469/

相关文章:

javascript - IE 和 FF 中的脚本文件大小差异

html - 表格单元格内的 100% 高度 div 在 Firefox 上不起作用

javascript - 如何在 javascript html 游戏中使文本变大?

javascript - 如何自动刷新div

javascript - 如何统计文本节点中实际显示在网页上的字符数?

javascript - HTML Canvas - JavaScript 动态旋转问题

javascript - 如何在不跳到顶部的情况下替换可滚动 div 的内容?

javascript - 如何在 React 中的对象之间复制嵌套状态

Javascript 食谱计算器,卡在 isNan() 函数上?

javascript - 如何缩放网页内容?