在 svg 中添加新行,bug 看不到该行

发布于 2024-12-06 19:32:17 字数 919 浏览 1 评论 0原文

我想在 svg 中添加一个新行 当按下添加按钮时,应将新行添加到 svg 中 我可以确定该行已添加到元素中,但为什么它没有显示在屏幕上?

<!DOCTYPE html>
<html>
<head>
<style type="text/css">
#map
{
    border:1px solid #000;
}
line
{
    stroke:rgb(0,0,0);
    stroke-width:3;
}
</style>
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script type="text/javascript">
jQuery(document).ready(function(){
    $("#add").click(function(){
        var newLine=$('<line id="line2" x1="0" y1="0" x2="300" y2="300" />');
        $("#map").append(newLine);
    });
})
</script>
</head>

<body>

<h2 id="status">
0, 0
</h2>
<svg id="map" width="800" height="600" version="1.1" xmlns="http://www.w3.org/2000/svg">
<line id="line" x1="50" y1="0" x2="200" y2="300"/>
</svg>
<button id="add">add</button>



</body>
</html>

I want to add a new line into the svg
when, the add button is pressed, a new line should be added into the svg
I can sure the line is added in the elements, but why it is not displayed on the screen?

<!DOCTYPE html>
<html>
<head>
<style type="text/css">
#map
{
    border:1px solid #000;
}
line
{
    stroke:rgb(0,0,0);
    stroke-width:3;
}
</style>
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script type="text/javascript">
jQuery(document).ready(function(){
    $("#add").click(function(){
        var newLine=$('<line id="line2" x1="0" y1="0" x2="300" y2="300" />');
        $("#map").append(newLine);
    });
})
</script>
</head>

<body>

<h2 id="status">
0, 0
</h2>
<svg id="map" width="800" height="600" version="1.1" xmlns="http://www.w3.org/2000/svg">
<line id="line" x1="50" y1="0" x2="200" y2="300"/>
</svg>
<button id="add">add</button>



</body>
</html>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

仙女 2024-12-13 19:32:17

为了向 SVG 对象添加元素,必须在 SVG 命名空间中创建这些元素。由于 jQuery 目前不允许您执行此操作(AFAIK),因此您无法使用 jQuery 来创建元素。这将起作用:

$("#add").click(function(){
    var newLine = document.createElementNS('http://www.w3.org/2000/svg','line');
    newLine.setAttribute('id','line2');
    newLine.setAttribute('x1','0');
    newLine.setAttribute('y1','0');
    newLine.setAttribute('x2','300');
    newLine.setAttribute('y2','300');
    $("#map").append(newLine);
});

这是一个有效的示例

In order to add elements to an SVG object those elements have to be created in the SVG namespace. As jQuery doesn't allow you to do this at present (AFAIK) you can't use jQuery to create the element. This will work:

$("#add").click(function(){
    var newLine = document.createElementNS('http://www.w3.org/2000/svg','line');
    newLine.setAttribute('id','line2');
    newLine.setAttribute('x1','0');
    newLine.setAttribute('y1','0');
    newLine.setAttribute('x2','300');
    newLine.setAttribute('y2','300');
    $("#map").append(newLine);
});

Here's a working example.

So尛奶瓶 2024-12-13 19:32:17

代码少一点

 $("#add").click(function(){
      $(document.createElementNS('http://www.w3.org/2000/svg','line')).attr({
          id:"line2",
          x1:0,
          y1:0,
          x2:300,
          y2:300
      }).appendTo("#map");

});

with little bit less code

 $("#add").click(function(){
      $(document.createElementNS('http://www.w3.org/2000/svg','line')).attr({
          id:"line2",
          x1:0,
          y1:0,
          x2:300,
          y2:300
      }).appendTo("#map");

});
你又不是我 2024-12-13 19:32:17

我通过阅读 svg elements insideHTML 属性解决了这个问题
然后将其写回 svg 元素的 innerHTML 属性
这会强制元素刷新。

I solved this by reading the svg elements innerHTML property
and then writing it back to the svg elements innerHTML property
This forces an element refresh.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文