RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 800864
Accepted
Дмитрий Полянин
Дмитрий Полянин
Asked:2020-03-18 17:57:40 +0000 UTC2020-03-18 17:57:40 +0000 UTC 2020-03-18 17:57:40 +0000 UTC

为什么不能通过 JavaScript 向 SVG 添加元素?

  • 772

有一个脚本,它给SVG添加了一个圆圈,这个圆圈是添加到HTML标记本身的,你可以通过调试器查看,但是我的浏览器中没有显示这个圆圈。也就是说,HTML 已更新,但未绘制添加的元素。

同时,生成的 SVG 本身是有效的,您可以通过从调试器中复制来检查这一点。更简单的是,你可以直接在调试器中检查,点击编辑HTML并在SVG前加一个空格,例如,保存,圆圈立即出现。

为什么会这样以及如何解决?

var svg = document.getElementById("svg1");

var circle = document.createElement("circle");

circle.setAttribute("cx", 110);
circle.setAttribute("cy", 20);
circle.setAttribute("r", 50);
circle.setAttribute("fill", "green");

svg.appendChild(circle);
<svg id="svg1" style="width:400px; height:150px; background-color: pink;">
  <rect x="20" y="20" width="100" height="60" fill="blue" />
</svg>

javascript
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Alexandr_TT
    2020-03-18T19:07:46Z2020-03-18T19:07:46Z

    浏览器在不断改进。如果早些时候有必要namespace为 svg 代码声明:
    xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink",

    现在你不能这样做,它会起作用,但并不总是正确的。
    例如,如果你写viewbox而不是正确的拼写 - “view Box ”,那么解析器不会给出错误消息,因为HTML在哪种情况下写字母并不重要。但是 svg 区分大小写,并且该命令不起作用。因此,最好始终指定namespace.
    还有Javascript用于创建对象的命令对于有保证的跨浏览器解决方案SVG ,使用命令而不是命令总是更好。setAttributesetAttributeNS

    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="600" height="400">
      <script type="text/ecmascript"><![CDATA[
        var svgNS = "http://www.w3.org/2000/svg";
        var xlinkNS = "http://www.w3.org/1999/xlink";
        function createCircle() {
          var newCircle = document.createElementNS(svgNS,"circle");
          newCircle.setAttributeNS(null,"cx",Math.random() * 100+250);	
          newCircle.setAttributeNS(null,"cy",Math.random() * 100+100);		
          newCircle.setAttributeNS(null,"r",Math.random() * 100);		
          newCircle.setAttributeNS(null,"stroke",Math.random() * 100);	
          newCircle.setAttributeNS(null,"fill-opacity",Math.random());		
          var red = Math.round(Math.random() * 255);
          var green = Math.round(Math.random() * 255);
          var blue = Math.round(Math.random() * 255);
          newCircle.setAttributeNS(null,"fill","rgb("+ red +","+ green+","+blue+")");
          document.getElementById("firstCircle").appendChild(newCircle);
        }	
         
      ]]></script>
        <g id="firstCircle" onclick="createCircle()"> 
      <rect x="50" y="20" width="150" height="30" rx="10" fill="yellowgreen"  />
        <text x="64" y="40" fill="purple"  font-size="16px">Create a new circle.</text>
         </g>
    </svg>

    • 5

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5