posts - 710,  comments - 81,  views - 260万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

动态添加元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<html>
<head></head>
<body>
<div>x坐标值<input id="xValue"></div>
<div>y坐标值<input id="yValue"></div>
<div>文本内容<input id="iText"></div>
<button id="add">动态添加元素</button>
<br/>
<iframe id="mySVG" src="map.svg" style="width:100%;height:400px;"></iframe>
</body>
<script src="jquery.min.js"></script>
<script>
    var svgDoc = null;
    var time = null;
  
    // 动态添加元素
    var addElement = function(x, y, nodeText) {
        // 添加圆形
        var c = svgDoc.createElementNS('http://www.w3.org/2000/svg', 'circle');
        c.setAttribute('cx', x);
        c.setAttribute('cy', y);
        c.r.baseVal.value = 7;
        c.setAttribute('fill', 'red');
        c.addEventListener("click", function() {
            alert('圆形点击测试:' + nodeText);
        });
        c.addEventListener("mouseover", function() {
            console.log('圆形鼠标悬停测试:' + nodeText);
        });
        svgDoc.rootElement.appendChild(c);
  
        // 添加文本
        var t = svgDoc.createElementNS('http://www.w3.org/2000/svg', 'text');
        t.setAttribute("x", parseInt(x) + 5);
        t.setAttribute("y", parseInt(y) + 10);
        t.setAttribute("font-size", "20");
        t.setAttribute('fill', 'green');
        t.addEventListener("click", function() {
            alert('文本点击测试:' + nodeText);
        });
        t.addEventListener("mouseover", function() {
            console.log('文本鼠标悬停测试:' + nodeText);
        });
        t.innerHTML = nodeText;
        svgDoc.rootElement.appendChild(t);
    };
  
    // 载入SVG
    var loadSvg = function() {
        svgDoc = document.getElementById("mySVG").contentWindow.document;
        if(svgDoc == null) {
            time = setTimeout("loadSvg()", 300);
        } else {
            clearTimeout(time);
            loadCallback();
        }
    };
  
    // 载入回调
    var loadCallback = function() {
        console.log("加载完成");
    };
  
    $(function() {
        // 延迟加载
        setTimeout("loadSvg()", 300);
  
        // 按钮
        $("#add").click(function() {
            var nodeText = $("#iText").val();
            if(nodeText == "") {
                nodeText = "未输入文本";
            }
            console.log(nodeText);
            addElement($("#xValue").val(), $("#yValue").val(), nodeText);
        });
    });
</script>
</html>

 map.svg

1
2
3
4
5
6
7
8
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="2377" height="2867"><defs>
    <style type="text/css">
      @font-face {
        font-family: 'topology';
        src: url('http://at.alicdn.com/t/font_1331132_h688rvffmbc.ttf?t=1569311680797') format('truetype');
      }
    </style>
  </defs><g/></svg>

  

 

posted on   itprobie-菜鸟程序员  阅读(1556)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2019-07-07 sql查询表的所有字段和表字段对应的类型
2018-07-07 avalon子孙元素属性监听
2015-07-07 SqlDataAdapter.Update批量数据更新
2015-07-07 批量添加数据SqlBulkCopy
2015-07-07 SqlDataAdapter 批量更新数据库表
点击右上角即可分享
微信分享提示